繁体   English   中英

将多行转换为具有更多列的单行

[英]Convert multiple rows into single row with more columns

我有一个与 id 相关的属性的 SQL Server 表,并且想要做一个查询来检查一个 id 是否有一组属性。 基本上我想按如下方式进行转换,按 Id 分组并为每个唯一属性添加一列:

起始表:

ID 支柱 价值
1 P1 V1
1 P2 V2
1 P3 V3
2 P1 V4
2 P2 V5
2 P3 V6

结果表:

ID P1 P2 P3
1 V1 V2 V3
2 V4 V5 V6

甚至可以将行值转换为列名吗? 我对 SQL 很陌生,并没有设计这个初始表配置。 到目前为止,我尝试使用 pivot 和 group by 都没有成功。

这里有几个选项。

您可能注意到我在子查询中列出了 3 列。 您只需要使用所需的列“馈送”您的 PIVOT。

要透视的已知列

Select *
 From  (
        Select ID
              ,Prop
              ,Value
         From YourTable
       ) src
 Pivot (max(Value) for Prop in ([P1],[P2],[P3]) ) pvt

动态枢轴和版本 <2017

Declare @SQL varchar(max) = '
Select *
 From (
        Select ID
              ,Prop
              ,Value
         From YourTable
      ) A
 Pivot (max([Value]) For [Prop] in (' + stuff((Select Distinct ','+QuoteName(Prop) 
                                                From  YourTable
                                                Order By 1 
                                                For XML Path('')),1,1,'')  + ') ) p'
Exec(@SQL);

2017+ 的动态枢轴

Declare @SQL varchar(max) = '
Select *
 From (
        Select ID
              ,Prop
              ,Value
         From YourTable
      ) A
 Pivot (max([Value]) For [Prop] in (' + (Select string_agg(quotename(Prop),',') 
                                          From (Select distinct Prop From YourTable ) A) + ') ) p'
Exec(@SQL);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM