我对SQL有点新知识。因此,希望我能解决这个问题,因为我还没有找到答案。 我已经连接了其他来源的表,并且需要基于一个列的唯一值与另一个列的总和来创建新列。值。
例如,这是我的桌子:
这就是我需要得到的(A
中每个唯一值的总和B
作为一列添加)
现在,我可以像这样手动进行操作:
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
中可以有数百个唯一值。
因此,请问如何正确执行此操作。
答案 0 :(得分:1)
如果您只想查看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]
的每个不同值只有一行,那么您要么需要知道{ {1}}是并使用AM.[B]
。
如果未知PIVOT
的确切值,或者随着时间的变化经常变化,则您需要做一些动态的操作,例如在this answer中,但方向相反。