繁体   English   中英

在单行中汇总多行

[英]Rolling up multiple rows in single row

我正在尝试合并员工数据库表的行

这是我原来的桌子

在此处输入图片说明

我想根据部门合并行。 这是我的预期结果。

在此处输入图片说明

我尝试使用FOR XML PATH('')),1,1,''),但我只能向上卷一列。

我知道我们在这里也有类似的问题但它只汇总了一列。

任何帮助深表感谢

只需对其他列使用相同的方法:

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

您也可以尝试以下查询:

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

我是几天前在网上找到的。 我尝试了一下,对我来说效果很好。 快去看看,你过得如何。

http://groupconcat.codeplex.com/

http://groupconcat.codeplex.com/releases/view/618110

创建表测试表(Customer VARCHAR(50),Product VARCHAR(50),Method VARCHAR(50),INDEX ix CLUSTERED(Customer))

插入测试表(客户,产品,方法)值('John','Computer','Credit'),('John','Mouse','Cash'),('Will','Computer','Credit '),('威尔','鼠标','现金'),('威尔','扬声器','现金'),('托德','计算机','信用')

选择*从测试表

从测试表中按客户选择dbo.GROUP_CONCAT(产品),dbo.GROUP_CONCAT(方法)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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