2010-06-21 39 views
0

我縮短了很多代碼,但希望有人能夠知道我正在嘗試做什麼。需要總結兩個不同的選擇,我試圖把他們每個人在左外連接(嘗試內連接)。如果我運行左外外加註釋掉,我得到正確的數據,但是當我運行它們在一起,我真的搞砸了計數。所以,我知道連接可能不是從同一個表中彙總數據的正確方法,我可以;簡單地在where子句中執行,其中包含其他表中涉及的int代碼,我註釋掉了。SQL求和多重聯接

我想我想總結2個不同的查詢。

SELECT eeoc.EEOCode AS 'Test1', 
     SUM(eeosum.Col_One) AS 'Col_One', 

FROM EEO1Analysis eeo 
    LEFT OUTER JOIN (
     SELECT eeor.AnalysisID, eeor.Test1, 
       SUM(CASE eeor.ZZZ WHEN 1 THEN (CASE eeor.AAAA WHEN 1 THEN 1 ELSE 0 END) ELSE 0 END) AS 'Col_One', 
     FROM EEO1Roster eeor 
      .......... 
     WHERE eeor.AnalysisID = 7 
     GROUP BY eeor.AnalysisID, eeor.EEOCode 
    ) AS eeosum2 ON eeosum2.AnalysisID = eeo.AnalysisID 
    LEFT OUTER JOIN (
     SELECT eeor.AnalysisID, eeor.Test1, 
       SUM(CASE eeor.ZZZ WHEN 1 THEN (CASE eeor.AAAA WHEN 1 THEN 1 ELSE 0 END) ELSE 0 END) AS 'Col_One', 
     FROM EEO1Roster eeor 
      ........ 
    ) AS eeosum ON eeosum.AnalysisID = eeo.AnalysisID 

WHERE eeo.AnalysisID = 7 
GROUP BY eeoc.Test1 
+0

你的例子有點令人困惑:兩個子查詢看起來相同。 – user347594 2010-06-21 02:21:42

回答

3

你可能UNION ALL 2個查詢,然後做一個SUM + GROUP BY ie

SELECT Col1, Col2, SUM(Col_One) FROM 
    (SELECT Col1, Col2, SUM(Col_One) 
      FROM Table1 
      WHERE <Conditionset1> 
      GROUP BY Col1, Col2 
    UNION ALL 
    SELECT Col1, Col2, SUM(Col_One) 
      FROM Table1 
      WHERE <Conditionset2> 
      GROUP BY Col1, Col2) 
GROUP BY 
    Col1, Col2 

當然,如果有返回的行,它們將被重複計數。

0

什麼

SELECT ... FROM EEO1Analysis eeo, 

    (SELECT ... LEFT OUTER JOIN ... GROUP BY ...) AS data 

...  

而且,如果可以的話,我建議準備數據來分開表格,然後用不同的分析ID對它們進行操作。至少可以節省一些執行時間。

0

需要從兩個不同的選擇總和 如果你希望一個行單列的結果,這樣就足夠了

SELECT 
    ((SELECT SUM(...) FROM ... GROUP BY...) + 
    (SELECT SUM(...) FROM ... GROUP BY...)) as TheSumOfTwoSums