如何将SQL Server中Country表的Name_Country列值转为透视格式?
解决方案
针对你需要将DBO.Country表中前4条Name_Country数据转为单行多列的需求,以下是两种适用于SQL Server的实现方法:
方法一:条件聚合(逻辑直观,推荐)
通过给每条数据添加行号,再利用条件聚合将行数据转为列:
SELECT MAX(CASE WHEN rn = 1 THEN Name_Country END) AS NAME_1, MAX(CASE WHEN rn = 2 THEN Name_Country END) AS NAME_2, MAX(CASE WHEN rn = 3 THEN Name_Country END) AS NAME_3, MAX(CASE WHEN rn = 4 THEN Name_Country END) AS NAME_4 FROM ( SELECT TOP(4) Name_Country, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn FROM DBO.Country ) t
说明:
ORDER BY (SELECT NULL)用于保留原始查询的返回顺序,若需要按特定字段排序,替换为对应字段即可(比如ORDER BY Name_Country)。
方法二:使用PIVOT运算符
利用SQL Server内置的PIVOT功能实现行转列:
SELECT NAME_1, NAME_2, NAME_3, NAME_4 FROM ( SELECT TOP(4) Name_Country, 'NAME_' + CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS VARCHAR(10)) AS col_name FROM DBO.Country ) t PIVOT ( MAX(Name_Country) FOR col_name IN (NAME_1, NAME_2, NAME_3, NAME_4) ) p
执行结果
运行上述任意语句后,将得到目标格式的结果:
| NAME_1 | NAME_2 | NAME_3 | NAME_4 |
|---|---|---|---|
| USA | ENGLAND | ITALY | GERMANY |
内容的提问来源于stack exchange,提问作者amirlol
相关产品推荐
相关产品推荐

