我试图调整以下内容,但我不知道为什么我很难搞清楚这一点。
数据脚本
create table #data (ID varchar(50)
, nm varchar(50)
, val decimal(18,2)
)
insert into #data values (1,'Name1', 100.00),
(1,'Name2', 200.00),
(2,'Name3', 300.00),
(2,'Name4', 400.00),
(2,'Name5', 500.00),
(3,'Name6', 600.00),
(4,'Name7', 700.00),
(4,'Name8', 800.00),
(5,'Name9', 900.00)
通缉结果作为SQL Server中的表
1 Name1 100 Name2 200
2 Name3 300 Name4 400 Name5 500
3 Name6 600
4 Name7 700 Name8 800
5 Name9 900
更新 以下提供两个字段的结果,但我真正想要的是名称和值都存在于不同的列中,而不是一个,
SELECT id,
(
SELECT nm,val
FROM #data
WHERE id = d.id
ORDER BY id FOR XML PATH('')
)
FROM #data d
WHERE
id IS NOT NULL
GROUP BY id;
答案 0 :(得分:0)
这是“pivot”而不是聚合字符串连接的示例。 SQL查询的一个问题是您需要指定要返回的确切列。因此,对于返回的列,这不是动态的。
以下内容每nm
:
select id,
max(case when seqnum = 1 then nm end) as nm_1,
max(case when seqnum = 1 then val end) as val_1,
max(case when seqnum = 2 then nm end) as nm_2,
max(case when seqnum = 2 then val end) as val_2,
max(case when seqnum = 3 then nm end) as nm_3,
max(case when seqnum = 3 then val end) as val_3
from (select d.*,
row_number() over (partition by id order by (select null)) as seqnum
from #data d
) d
group by id;
请注意,您可能希望按插入顺序排列列。如果是这样,您需要指定一个包含排序的列。我建议将表定义为:
create table #data (
dataId int identity(1, 1,) primary key,
ID varchar(50),
nm varchar(50),
val decimal(18,2)
);