2015-09-30 33 views
0

在此先感谢您的帮助。T-SQL:需要两个表的总工作时间和产量

我有两个表,loginsales 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 

我希望它与代理人谁在15年9月29日的工作返回名称1列,1列,总工作时间在15年9月29日,1列,体积上9-出售29-2015。实际上,这两个总计列(数百小时和数千美元)都会返回疯狂的高额金额。

+0

在给定代理的登录表中是否有多个记录?例如,针对不同日期或“会话”的不同记录。似乎没有任何对这张表格有任何疑问的日期检查。除非通过sales.start专栏进行说明。没有关于模式的更多信息,这并不是很清楚。 –

+0

是的,代理可能每天有多个登录和注销。 – Priide

+0

sales.start是如何影响所有这些的?检查sales.start是否会限制从登录表中返回的记录?对登录日期没有任何限制,似乎您将加入给定代理的所有登录记录。 –

回答

0

问题是连接表时的笛卡尔乘积。这应该可以解决问题。

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' 
    ) 
+0

感谢这让我足够接近,弄清楚了。 – Priide