2010-06-21 49 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