Sql server T-SQL:需要两个表的总工作时间和生产量
提前感谢您的帮助 我有两个表,Sql server T-SQL:需要两个表的总工作时间和生产量,sql-server,Sql Server,提前感谢您的帮助 我有两个表,login和sales in。我需要从登录表中获取总工作时间,从销售表中获取总销售量 SELECT L.AGENT, SUM (DATEDIFF(ss, LOGIN.LOGON,LOGIN.LOGOFF)/3600.0)AS TIME, SUM (SALES.SALEAMT) AS TOTAL FROM SALES JOIN LOGIN L ON L.AGENTID = SALES.AGENT WHERE
login
和sales in
。我需要从登录表中获取总工作时间,从销售表中获取总销售量
SELECT
L.AGENT,
SUM (DATEDIFF(ss, LOGIN.LOGON,LOGIN.LOGOFF)/3600.0)AS TIME,
SUM (SALES.SALEAMT) AS TOTAL
FROM
SALES
JOIN
LOGIN L ON L.AGENTID = SALES.AGENT
WHERE
SALES.START > '2015-09-29'
GROUP BY
AGENT
我预计它将返回1列,其中列有2015年9月29日工作的代理商的姓名,1列有2015年9月29日工作的总小时数,1列有2015年9月29日的销售量。实际上,这两个合计列的返回量都非常高(数百小时和数千美元)。问题在于连接表时的笛卡尔积。这应该可以解决问题
SELECT x.AGENT,
x.TIME,
(SELECT SUM(SALES.SALEAMT) FROM SALES WHERE SALES.AGENT = x.AGENT AND SALES.START > '2015-09-29')
FROM
(SELECT L.AGENT,
SUM (DATEDIFF(ss, LOGIN.LOGON,LOGIN.LOGOFF)/3600.0)AS TIME,
FROM SALES
WHERE LOGIN.LOGON > '2015-09-29'
)
给定代理的登录表中是否有多条记录?例如,不同日期或“会话”的不同记录。似乎没有对该表进行任何类型的日期检查,这似乎是可疑的。除非通过sales.start列对此进行了说明。如果没有关于模式的更多信息,就不太清楚。是的,一个代理每天可能有多个登录和注销。sales.start是如何影响所有这些的?检查sales.start是否会以某种方式限制从登录表返回的记录?在没有任何登录日期限制的情况下,您似乎加入了给定代理的所有登录记录。太棒了!我添加了l.logon>'2015-09-29',现在音量正确,但小时数仍然关闭。有什么想法吗?谢谢这让我有足够的机会来解决这个问题。