首页 >数据库 >mysql教程 >如何使用 UNPIVOT 将动态 SQL Server 列转置为行?

如何使用 UNPIVOT 将动态 SQL Server 列转置为行?

Linda Hamilton
Linda Hamilton原创
2024-12-05 04:39:11394浏览

How to Transpose Dynamic SQL Server Columns to Rows Using UNPIVOT?

使用 UNPIVOT 将动态 SQL Server 列转置为行

在 SQL Server 中,UNPIVOT 函数允许将列转置为行,这是一种经常使用的技术称为非旋转。这在处理具有动态或可变列数的数据时特别有用。

示例场景

考虑以下表 1:

Table1
-----------------------------------------
Id       abc  brt ccc ddq eee fff gga hxx
-----------------------------------------
12345     0    1   0   5   0   2   0   0  
21321     0    0   0   0   0   0   0   0   
33333     2    0   0   0   0   0   0   0   
41414     0    0   0   0   5   0   0   1   
55001     0    0   0   0   0   0   0   2   
60000     0    0   0   0   0   0   0   0 
77777     9    0   3   0   0   0   0   0

目标是将 Table1 逆透视到以下 Expected_Result_Table,仅考虑大于的值0:

Expected_Result_Table
---------------------
Id      Word   Qty>0
---------------------
12345    brt    1
12345    ddq    5
12345    fff    2
33333    abc    2
41414    eee    5
41414    hxx    1
55001    hxx    2
77777    abc    9
77777    ccc    3

使用 UNPIVOT 的解决方案

UNPIVOT 函数采用具有多个列的表,并将其转换为具有两个附加列的更宽的表:一个“值”包含来自原始表列的数据的列和标识源的“名称”列列。

SELECT Id,
       name AS Word,
       value AS Qty>0
FROM Table1
UNPIVOT (value FOR name IN (abc, brt, ccc, ddq, eee, fff, gga, hxx)) AS unpvt
WHERE value > 0;

此查询将生成预期结果。

以上是如何使用 UNPIVOT 将动态 SQL Server 列转置为行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn