2016-11-15 124 views
0

我有一个SQL查询像这样基于子查询的数据:我怎样才能汇总结果

SELECT (SUM(DURATIONSECS)/3600.00) AS LaborHrs, 
(SELECT LABORLEV2 t2 FROM LABOR WHERE LABORID = t1.LABORID) As Dept 
FROM Table1 t1 
WHERE DTM BETWEEN 'datetime1' AND 'datetime2' AND 
(SELECT LABORLEV1 FROM LABOR WHERE LABORID = t1.LABORID) = '100' 
AND PAYCODEID='1' 
Group BY LABORID 

这给了我这样的正确的数据:

LaborHrs  Dept 
90.5000000  office 
1033.2500000 retail 
522.2500000  retail 
217.5000000  misc 
1145.5000000 misc 
40.0000000  retail 

不过,我需要的结果,如果部门名称相同,例如我需要将“零售”和“其他”的所有人工小时数之和放在同一列中,则需要进行汇总。我尝试过按部门分组,但它没有识别该列名称。

+0

GROUP BY只能当你选列已经通过FROM子句可用,因此您需要将其加入。 – DVT

回答

3

我改写了您的查询基于我明白你的问题,但我很怀疑这部分的:

DTM BETWEEN 'datetime1' AND 'datetime2' 

我认为它是一个日期变量或数字,你会替补。 如果是这样,我想这里可能是答案。

SELECT (SUM(DURATIONSECS)/3600.00) AS LaborHrs, 
    , l1.LABORLEV2 AS Dept 
FROM Table1 t1 
    JOIN LABOR l1 ON l1 ON l1.LABORID=t1.LABORID 
WHERE DTM BETWEEN 'datetime1' AND 'datetime2' AND l1.LABORLEV1='100' 
    AND t1.PAYCODEID='1' 
Group BY t1.LABORID, l1.LABORLEV2 
+0

对查询进行了一些更正。 – DVT

+0

对不起,我应该指定我只是将datetime值更改为datetime1和datetime2。 – user3839756

+0

谢谢,我需要改变的唯一事情是在Group BY子句中将l1.LABORLEV2改为PAYCODEID – user3839756

1

如果要分组某个列,该列不能为子查询,因此您必须使用JOINS重写查询。

通过什么我understant你的查询,你可以加入表Tabl1劳动和移动你的条件,以一个单一的WHERE语句,像这样:

SELECT 
    l.LABORLEV2 AS Dept, 
    (SUM(t1.DURATIONSECS)/3600.00) AS LaborHrs 
FROM Table1 t 
INNER JOIN LABOR l ON t.LABORID=l.LABORID 
WHERE 
    l.LABORLEV1='100' AND 
    t1.PAYCODEID='1' AND 
    t1.DTM BETWEEN 'datetime1' AND 'datetime2' 
GROUP BY l.LABORLEV2