[英]Rolling up multiple rows in single row
I am trying to merge rows of employee DB table 我正在尝试合并员工数据库表的行
Here is my original table 这是我原来的桌子
I want to merge rows based on department. 我想根据部门合并行。 here is my expected result. 这是我的预期结果。
I tried using FOR XML PATH('')), 1, 1, '') but I canroll up only one column. 我尝试使用FOR XML PATH('')),1,1,''),但我只能向上卷一列。
I know we have similar question here but its rolling up only one column. 我知道我们在这里也有类似的问题,但它只汇总了一列。
any help is much appreciated 任何帮助深表感谢
Just use the same method for the other columns: 只需对其他列使用相同的方法:
SELECT
t.Department,
Worker =
STUFF((
SELECT ';' + Worker
FROM tbl
WHERE Department = t.Department
ORDER BY Worker
FOR XML PATH(''), TYPE
).value('text()[1]','NVARCHAR(MAX)'), 1, 1, N''),
Phone =
STUFF((
SELECT ';' + Phone
FROM tbl
WHERE Department = t.Department
ORDER BY Worker
FOR XML PATH(''), TYPE
).value('text()[1]','NVARCHAR(MAX)'), 1, 1, N''),
Ext =
STUFF((
SELECT ';' + Ext
FROM tbl
WHERE Department = t.Department
ORDER BY Worker
FOR XML PATH(''), TYPE
).value('text()[1]','NVARCHAR(MAX)'), 1, 1, N'')
FROM tbl t
GROUP BY t.Department
You can also try the query below: 您也可以尝试以下查询:
SELECT
t.Department,
Worker = STUFF((
SELECT ';' + s.Worker
FROM
YourTable s
WHERE
s.Department = t.Department
FOR XML PATH('')),1,1,''),
Phone = STUFF((
SELECT ';' + CAST(s.Phone AS VARCHAR(25))
FROM
YourTable s
WHERE
s.Department = t.Department
FOR XML PATH('')),1,1,''),
Ext = STUFF((
SELECT ';' + CAST(s.Ext AS VARCHAR(25))
FROM
YourTable s
WHERE
s.Department = t.Department
FOR XML PATH('')),1,1,'')
FROM YourTable t
GROUP BY t.Department
I just found this online a couple days ago. 我是几天前在网上找到的。 I tried it and it worked great for me. 我尝试了一下,对我来说效果很好。 Give it a go and see how you get along. 快去看看,你过得如何。
http://groupconcat.codeplex.com/ http://groupconcat.codeplex.com/
http://groupconcat.codeplex.com/releases/view/618110 http://groupconcat.codeplex.com/releases/view/618110
Create TABLE testtable( Customer VARCHAR(50), Product VARCHAR(50), Method VARCHAR(50), INDEX ix CLUSTERED (Customer) ) 创建表测试表(Customer VARCHAR(50),Product VARCHAR(50),Method VARCHAR(50),INDEX ix CLUSTERED(Customer))
INSERT INTO testtable (Customer, Product, Method) VALUES ('John', 'Computer', 'Credit'), ('John', 'Mouse', 'Cash'), ('Will', 'Computer', 'Credit'), ('Will', 'Mouse', 'Cash'), ('Will', 'Speaker', 'Cash'), ('Todd', 'Computer', 'Credit') 插入测试表(客户,产品,方法)值('John','Computer','Credit'),('John','Mouse','Cash'),('Will','Computer','Credit '),('威尔','鼠标','现金'),('威尔','扬声器','现金'),('托德','计算机','信用')
Select * From testtable 选择*从测试表
SELECT Customer,dbo.GROUP_CONCAT(product),dbo.GROUP_CONCAT(method) FROM testtable GROUP BY Customer 从测试表中按客户选择dbo.GROUP_CONCAT(产品),dbo.GROUP_CONCAT(方法)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.