SQL Server - 查询以检索列名和列的总和

sch*_*tda 3 sql t-sql sql-server

查询有困难。我有一个名为 products 的表,其中包含大量列,如下所示:

 X  |  Y  |  Z  | ... (and on)
----+-----+-----+
 4  |  9  |  4  |
 5  |  2  |  6  |
 2  |  5  |  9  |
Run Code Online (Sandbox Code Playgroud)

然后我想开发一个查询,它将输出列名及其总和,如下所示:

ProductName  |  Quantity
-------------+-----------
    X        |     11
    Y        |     16
    Z        |     19
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

提前致谢

Joh*_*tti 5

当然,UNPIVOT 和动态 SQL 可能会性能更高,但以下内容将“动态”取消透视并聚合您的数据。

请注意,这会将行转换为 XML,并且 NULL 值将被排除

例子

Select ProductName = C.Field
      ,Quanity     = sum(C.Value)
 From  YourTable A
 Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
 Cross Apply (
                Select Field = a.value('local-name(.)','varchar(100)')
                      ,Value = a.value('.','int')           --<< Change to desired data type
                 From  B.XMLData.nodes('/row')  as C1(n)
                 Cross Apply C1.n.nodes('./@*') as C2(a)
                 Where a.value('local-name(.)','varchar(100)') not in ('FieldsTo','Exclude')
             ) C
 Group By C.Field
Run Code Online (Sandbox Code Playgroud)

退货

ProductName Quanity
X           11
Y           16
Z           19
Run Code Online (Sandbox Code Playgroud)

如果它有助于可视化,子查询会生成:

在此输入图像描述