SQL Server查询以多个变量垂直堆叠列以求和

时间:2018-12-11 10:13:31

标签: sql-server-2008

我有几列包含多个变量及其关联的值。我想堆叠变量列及其关联的值列进行求和。

每个变量(例如ABC)可能会或可能不会出现在每一列中。 10个变量/值列中可能会出现大约200个变量(及其关联的值)。我刚刚展示了3个变量/值对中的6个变量。

这是我的专栏:

Variable1   Value1  Variable2   Value2  Variable3   Value3
ABC          1      ABC          9        ABC           6
DEF          2      DEF          8        DEF           5
XYZ          3      XYZ          7        XYZ           4
KLM          4      KLM          6        KLM           3
TUV          5                            TUV           2
                                          GHI           1

这是我想要的输出:

VariableAll  ValueAll
ABC           16
DEF           15
XYZ           14
KLM           13
TUV            7
GHI            1

任何能提供的指导将不胜感激。谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要3个独立的选择,每个列对一个,然后union all将它们组合成单个结果。

declare @t table(Variable1 varchar(50), Value1 int, Variable2 varchar(50), Value2 int, Variable3 varchar(50), Value3 int)
insert into @t(Variable1,   Value1,  Variable2,   Value2,  Variable3,   Value3) values
('ABC',    1, 'ABC',    9, 'ABC', 6),
('DEF',    2, 'DEF',    8, 'DEF', 5),
('XYZ',    3, 'XYZ',    7, 'XYZ', 4),
('KLM',    4, 'KLM',    6, 'KLM', 3),
('TUV',    5,  null, null, 'TUV', 2),
( null, null,  null, null, 'GHI', 1)


;with cte (Variable, [Value]) as (
select Variable1, Value1 from @t where Variable1 is not null
union all
select Variable2, Value2 from @t where Variable2 is not null
union all
select Variable3, Value3 from @t where Variable3 is not null
)
select Variable, SUM([Value]) as Total
from cte
group by Variable
order by Total desc