2010-06-21 13 views
0

J'ai raccourci le code un peu, mais j'espère que quelqu'un aura l'idée de ce que je vais essayer de faire. J'ai besoin d'additionner les totaux de deux sélections différentes, j'ai essayé de les mettre dans les jointures extérieures gauches (essayées aussi). Si je cours avec soit Left Outer Join commenté, j'obtiens les données correctes, mais quand je les fais tourner ensemble, je reçois des comptes vraiment foiré. Donc, je sais que les jointures ne sont probablement pas la bonne approche pour additionner les données de la même table, je peux le faire simplement dans une clause where il y a une autre table impliquée dans le code que j'ai commenté. Je suppose que j'essaie d'additionner 2 requêtes différentes.SQL Additionnant plusieurs jonctions

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

Votre exemple est un peu déroutant: les deux sous-requêtes semblent identiques. – user347594

Répondre

3

Vous pouvez UNION TOUTES les 2 requêtes, puis faites un SUM + GROUP Par exemple,

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 

Bien sûr, s'il y a des lignes retournées par et qu'elles seraient comptées deux fois.

0

Qu'en est-

SELECT ... FROM EEO1Analysis eeo, 

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

...  

? Et, si vous le pouvez, je vous recommande de préparer les données pour séparer les tables, puis de les utiliser avec des ID d'analyse différents. Pourrait sauver quelques temps d'exécution au moins.

0

besoin de résumer les totaux de deux sélections différentes Si vous prévoyez une ligne résultat une seule colonne, de cette façon est assez

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