SQL создание столбцов с суммой другого столбца по уникальным элементам - PullRequest
0 голосов
/ 11 марта 2020

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

Например, это моя таблица:

enter image description here

И это то, что мне нужно получить (сумма A для каждого уникального значения в B, добавленного в виде столбца):

enter image description here

На данный момент я могу сделать это вручную следующим образом:

SELECT 
    EM.[id]
    ,SUM(CASE WHEN AM.[B]='ZA' THEN EM.[A] ELSE 0 END) "ZA_sum_A"
    ,SUM(CASE WHEN AM.[B]='ZB' THEN EM.[A] ELSE 0 END) "ZB_sum_A"
FROM [xxx].x.x  AS AM
  INNER JOIN [yyy].[y].[y] AS EM ON (AM.ELEMENT = EM.ELEMENT)
  WHERE ...
GROUP BY EM.[id]

Но проблема в том, что я могу иметь сотни уникальных значений в B. Итак, вопрос, как это сделать правильно ..

1 Ответ

1 голос
/ 11 марта 2020

Если вы просто хотите увидеть суммированные значения EM.[A] для каждой комбинации EM.[id] и AM.[B], вы можете сделать:

select
    em.[id],
    am.[B],
    sum(em.[A])
from [xxx].x.x as am
join [yyy].[y].[y] as em on am.ELEMENT = em.ELEMENT
where [...]
group by em.[id], am.[B]

Если вы хотите иметь различные значения AM.[B] отображаются в виде столбцов, поэтому для каждого отдельного значения EM.[id] имеется только одна строка, вам нужно либо узнать, что такое отдельные значения AM.[B], и использовать PIVOT.

Если точные значения AM.[B] неизвестны или часто меняются с течением времени, вам нужно будет выполнить что-то динамическое c, как в в этом ответе , но в противоположное направление.

...