在 SQL Server 中将行转换为具有特定条件的列
Posted
技术标签:
【中文标题】在 SQL Server 中将行转换为具有特定条件的列【英文标题】:Convert Rows to Columns With Specific Conditions in SQL Server 【发布时间】:2013-07-28 07:12:54 【问题描述】:我在 SQL 服务器 2008 中有一个像这样的表
ID Name Have
1 Book PageNumber
2 Book Title
3 Book Papers
4 Car Wheels
5 Car Doors
6 Car Engine
7 Car Windows
我想像这样改变列和行的顺序
Name A B C D
Book PageNumber Title Papers -
Car Wheels Doors Engine Windows
是否可以编写一个自动进行此更改的查询? 我在 Microsoft Access 中使用 Cross Table 完成了此操作,但在 SQL 中我不知道。
问候,
【问题讨论】:
我觉得有需要Rows in Columns
(你的标题好像写错了)
我同意你的观点并纠正了这个问题。
【参考方案1】:
你可以使用PIVOT操作符来达到你想要的结果:
select name
, [1] as A
, [2] as B
, [3] as C
, [4] as D
from ( select name
, have
, row_number() over(partition by name order by id) as rn
from t1
) s
pivot (
max(have) for rn in ([1], [2],[3], [4])
) as pvt
结果:
NAME A B C D
------------------------------------------------------------
Book PageNumber Title Papers (null)
Car Wheels Doors Engine Windows
SQLFiddle Demo
【讨论】:
@nicholasKrasnov 只是好奇......无论如何要将其概括为没有动态 SQL 的可变数量的列? @LuisLL 我不知道。以上是关于在 SQL Server 中将行转换为具有特定条件的列的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 R2 在特定条件下选择特定行