SQL 将不同的行转换为一行和多列
Posted
技术标签:
【中文标题】SQL 将不同的行转换为一行和多列【英文标题】:SQL transform distinct rows into one row and multiple columns 【发布时间】:2021-04-10 15:01:37 【问题描述】:我有一个表和具有相同Name
的行最多可以出现 5 次。示例:
| Name | Value |
|--------|---------|
| Test | Value1 |
| Test | Value2 |
| Test | Value3 |
| FooBar | Value11 |
| FooBar | Value12 |
我正在尝试创建一个查询来压缩行以具有唯一的 Name
并将值传输到列。如果每个名称的值少于 5 个,则其余列应为 NULL。
| Name | Col1 | Col2 | Col3 | Col4 | Col5 |
|--------|---------|---------|--------|------|------|
| Test | Value1 | Value2 | Value3 | NULL | NULL |
| FooBar | Value11 | Value12 | NULL | NULL | NULL |
我查看了Pivot
,但没有要汇总的列。
我需要这种格式的 csv 文件。
使用 SQL Server 2016。
【问题讨论】:
【参考方案1】:您可以使用row_number()
构造一列:
select name,
max(case when seqnum = 1 then value end) as value_1,
max(case when seqnum = 2 then value end) as value_2,
max(case when seqnum = 3 then value end) as value_3,
max(case when seqnum = 4 then value end) as value_4,
max(case when seqnum = 5 then value end) as value_5
from (select t.*,
row_number() over (partition by name order by value) as seqnum
from t
) t
group by name;
【讨论】:
以上是关于SQL 将不同的行转换为一行和多列的主要内容,如果未能解决你的问题,请参考以下文章