![](/img/trans.png)
[英]Convert single column with multiple rows into a single row having multiple columns
[英]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.