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)
有任何想法吗?
提前致谢
当然,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)
如果它有助于可视化,子查询会生成: