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',现在音量正确,但小时数仍然关闭。有什么想法吗?谢谢这让我有足够的机会来解决这个问题。