将多行合并为一行

Rad*_*003 4 sql-server sql-server-2008

我想知道将以下行中的数据合并到另一个视图中的单个行的最佳方法.

这些是当前显示的结果;

 Type_ID | Client_ID              | PBX_Vendor |
 127     | 090820006311404926326C | Aastra     |
 127     | 090820006311404926326C | Ericsson   |
 127     | 111012237401404926326C | Aastra     |
 127     | 120209287521404926326C | Aastra     |
 127     | 120209287521404926326C | Alcatel    |
Run Code Online (Sandbox Code Playgroud)

以下是我希望看到的数据;

 Type_ID | Client_ID              | PBX_Vendor       |
 127     | 090820006311404926326C | Aastra, Ericsson |
 127     | 111012237401404926326C | Aastra           |
 127     | 120209287521404926326C | Aastra, Alcatel  |
Run Code Online (Sandbox Code Playgroud)

基本上,有多个PBX供应商与客户端ID相关联.对于服务台系统,我需要在一行中显示此显示.

我已经尝试使用CONCAT了,但我最终得到的是一行,其中有超过100个供应商,这些供应商并不特定于Client_ID.

非常感谢任何帮助!

SQL*_*son 7

这是一种方法(也适用于2005):

DECLARE @table TABLE
    (
      [Type_ID] INT,
      [Client_ID] VARCHAR(50),
      [PBX_Vendor] VARCHAR(50)
    )
Run Code Online (Sandbox Code Playgroud)

数据

INSERT  INTO @table
        SELECT  127,
                '090820006311404926326C',
                'Aastra'
        UNION ALL
        SELECT  127,
                '090820006311404926326C',
                'Ericsson'
        UNION ALL
        SELECT  127,
                '111012237401404926326C',
                'Aastra'
        UNION ALL
        SELECT  127,
                '120209287521404926326C',
                'Aastra'
        UNION ALL
        SELECT  127,
                '120209287521404926326C',
                'Alcatel'
Run Code Online (Sandbox Code Playgroud)

询问

SELECT  [Type_ID],
        [Client_ID],
        (
          SELECT    STUFF((
                            SELECT  ',' + [PBX_Vendor]
                            FROM    @table
                            WHERE   [Client_ID] = tbl.[Client_ID]
                                    AND [Type_ID] = tbl.[Type_ID]
                            GROUP BY [PBX_Vendor]
                            ORDER BY [PBX_Vendor]
                          FOR
                            XML PATH('')
                          ), 1, 1, '')
        ) PBX_Vendor
FROM    @table tbl
GROUP BY [Type_ID],
        [Client_ID]
Run Code Online (Sandbox Code Playgroud)

结果

Type_ID     Client_ID               PBX_Vendor
127         090820006311404926326C  Aastra,Ericsson
127         111012237401404926326C  Aastra
127         120209287521404926326C  Aastra,Alcatel
Run Code Online (Sandbox Code Playgroud)