SQL суммирование нескольких соединений - PullRequest
0 голосов
/ 21 июня 2010

Я немного сократил код, но, надеюсь, кто-то поймет, что я пытаюсь сделать.Нужно суммировать итоги от двух разных отборов, я попытался поместить каждый из них в левые внешние соединения (пробовал и внутренние соединения).Если я запускаю с комментариями в левом внешнем соединении, я получаю правильные данные, но когда я запускаю их вместе, я действительно получаю искаженные данные.Итак, я знаю, что объединения, вероятно, не являются правильным подходом к суммированию данных из одной и той же таблицы, я не могу просто сделать это в предложении where, где есть другая таблица, включенная в код, который я закомментировал.

Я полагаюя пытаюсь сложить вместе 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

Ответы [ 3 ]

3 голосов
/ 21 июня 2010

Вы можете ОБЪЕДИНИТЬ ВСЕ 2 запроса, а затем выполнить SUM + GROUP BY, т.е.

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 голосов
/ 21 июня 2010

Необходимо суммировать итоги двух разных выборов Если вы ожидаете одного столбца с одним результатом, этого достаточно

SELECT 
   ((SELECT SUM(...) FROM ... GROUP BY...) + 
   (SELECT SUM(...) FROM ... GROUP BY...)) as TheSumOfTwoSums
0 голосов
/ 21 июня 2010

А как же

SELECT ... FROM EEO1Analysis eeo,

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

...     

И, если вы можете, я бы порекомендовал подготовить данные к отдельным таблицам, а затем работать с ними с разными идентификаторами анализа. Может сэкономить время выполнения по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...