使用 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中文网其他相关文章!