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.
非常感谢任何帮助!
这是一种方法(也适用于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)