如何将多列数据表转换为关键词表(非动态SQL实现)
问题描述
我有一张包含CustID, FirstName, LastName, PhoneNumber, MembershipLevel等列的数据表,想要生成一张包含CustID, Keyword, Value列的关键词表——把原表的列名作为Keyword,每列对应一行数据。
原数据表示例:
CustID, FirstName, LastName, PhoneNumber, MembershipLevel 1234 Joe Smith 555-555-5555 Select
转换后的数据表示例:
CustID, Keyword , Value 1234 , FirstName , Joe 1234 , LastName , Smith 1234 , PhoneNumber , 555-555-5555 1234 , MembershipLevel, Select
我知道可以用动态SQL实现,但有没有无需使用过程化T-SQL的简洁SQL方法?
解决方案
当然可以,使用UNION ALL就能实现这种列转行需求,不需要动态SQL或过程化代码,写法简洁直接:
假设原表名为Customers,对应的SQL语句如下:
SELECT CustID, 'FirstName' AS Keyword, FirstName AS Value FROM Customers UNION ALL SELECT CustID, 'LastName' AS Keyword, LastName AS Value FROM Customers UNION ALL SELECT CustID, 'PhoneNumber' AS Keyword, PhoneNumber AS Value FROM Customers UNION ALL SELECT CustID, 'MembershipLevel' AS Keyword, MembershipLevel AS Value FROM Customers
关键说明:
- 每个
SELECT子句对应原表的一列,手动指定Keyword为原列名,Value为该列的实际数据 - 使用
UNION ALL而非UNION,避免不必要的去重操作,提升查询效率 - 如果后续需要新增列,只需在语句末尾追加对应的
SELECT子句即可
这种方法的唯一局限是当原表列数极多且频繁变动时,手动维护语句会稍显繁琐,但胜在语法简单直观,无需依赖动态SQL,适合列数固定或变化不频繁的场景。
内容的提问来源于stack exchange,提问作者BVernon
相关产品推荐
相关产品推荐

