2016-11-15 156 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