gpt4 book ai didi

sql-server - Sql多行合并为具有特定模式的单行

转载 作者:行者123 更新时间:2023-12-04 05:47:48 33 4
gpt4 key购买 nike

Sql选择查询将多行合并为一行
使用 sqlserver 2005 及以上
我有两张 table ,即 (tb_master,tb_tasks)

create table tb_tasks(
id int IDENTITY(1,1) NOT NULL,
id_tbmaster int NOT NULL,
Tasks nvarchar(max) NOT NULL
)

create table tb_master(
id int IDENTITY(1,1) NOT NULL,
grade nchar(10) NOT NULL,
name nvarchar(50) NOT NULL,
task_date datetime NOT NULL,
)

select * from tb_master
id grade name task_date
1 A John 2012-02-13 10:40:00.000
2 B Tom 2012-02-13 10:40:00.000


select tb_tasks
id id_tbmaster Tasks
1 1 cooking food.
2 1 Programing 2 hours
3 1 Attending meeting
4 2 Driving car
5 2 hangout with friends

试过这个查询
select tasks + ' , ' as 'data()' from tb_tasks for xml path('')

给出输出
XML
cooking food , Programing 2 hours , Attending meeting , Driving car , hangout with friends ,

我需要像 这样的输出
id Name  grade task_date                tasksDetails
1 John A 2012-02-13 10:40:00.000 1)cooking food, 2)Programing 2 hours, 3)Attending meeting
2 Tom B 2012-02-13 10:40:00.000 1) Driving car, 2)hangout with friends

我试过的查询
select a.name,a.task_date,b.tasks =replace(select (CONVERT(VARCHAR,(ROW_NUMBER() OVER(ORDER BY id DESC)))) + ') ' + tasks + ' , ' as 'data()'
from tb_tasks for xml path(''))
from tb_master a inner join tb_tasks b
on a.id=b.id_tbmaster

提前致谢

最佳答案

此查询将为每个 tb_master 创建请求的事件列表。两个指针:一个应该匹配 row_number() over() 和 query 中的排序以获得一致的结果,以及 OUTER APPLY 最后一行的数字 3是分隔符中的字符数(在本例中为 ' , ')。如果您更改分隔符,则需要调整此数字。

select a.name,a.task_date, b.taskList
from tb_master a
OUTER APPLY
(
select stuff ((select ' , '
+ CONVERT(VARCHAR(10), ROW_NUMBER()
OVER(ORDER BY id DESC))
+ ') '
+ tasks
from tb_tasks b
where a.id = b.id_tbmaster
order by id desc
for xml path (''))
, 1, 3, '') taskList
) b

现场演示在 Sql Fiddle .

关于sql-server - Sql多行合并为具有特定模式的单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460904/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com