SQL Server 2005中如何将单行拆分为多行?含表格转换需求
在SQL Server 2005实现单行转多行的两种方法
在SQL Server 2005里,你可以通过两种实用的方式完成这种单行记录转成键值对多行的需求,我给你详细演示一下:
方法一:使用UNION ALL手动拼接
这种方法直观易懂,兼容性拉满,哪怕是更早的SQL Server版本也能运行,适合列数不多的场景:
SELECT 'Col1' AS heading1, data1 AS heading2 FROM YourTableName UNION ALL SELECT 'Col2' AS heading1, data2 AS heading2 FROM YourTableName UNION ALL SELECT 'Col3' AS heading1, data3 AS heading2 FROM YourTableName UNION ALL SELECT 'Col4' AS heading1, data4 AS heading2 FROM YourTableName UNION ALL SELECT 'Col5' AS heading1, data5 AS heading2 FROM YourTableName;
原理很简单:把每一列单独作为一条记录查询出来,再用UNION ALL把所有结果合并成一个结果集。记得把YourTableName替换成你实际的表名哦。
方法二:使用UNPIVOT运算符
SQL Server 2005开始引入了UNPIVOT,专门用来做这种列转行的操作,代码更简洁,适合列数较多的情况:
SELECT heading1, heading2 FROM YourTableName UNPIVOT (heading2 FOR heading1 IN (Col1, Col2, Col3, Col4, Col5)) AS unpvt;
这里的逻辑是:
heading2是用来存放原列值的新列名heading1是用来存放原列名的新列名IN()括号里列出你需要转换的所有原列名
⚠️ 注意:使用UNPIVOT时,所有要转换的列必须是相同的数据类型,如果有不同类型,得先通过CAST或CONVERT统一类型后再操作。
内容的提问来源于stack exchange,提问作者Pradip Biswas
相关产品推荐
相关产品推荐

