在 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 中将行值转换为列名

在sql server中将行/表记录转换为json文档

如何在 SQL Server 或 C# 代码中将行转换为列

SQL Server 2008 R2 在特定条件下选择特定行

Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

如何在 SQL Server 中将行动态转换为列