简体   繁体   English

在单行中汇总多行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM