Вопрос по sql-server-2008, sql-server – Объединить несколько строк в одну строку
Я хотел бы знать лучший подход для объединения данных из следующих строк в одну строку в другом представлении.
Это результаты, которые отображаются в данный момент;
<code> Type_ID | Client_ID | PBX_Vendor | 127 | 090820006311404926326C | Aastra | 127 | 090820006311404926326C | Ericsson | 127 | 111012237401404926326C | Aastra | 127 | 120209287521404926326C | Aastra | 127 | 120209287521404926326C | Alcatel | </code>
Вот как я хотел бы видеть данные;
<code> Type_ID | Client_ID | PBX_Vendor | 127 | 090820006311404926326C | Aastra, Ericsson | 127 | 111012237401404926326C | Aastra | 127 | 120209287521404926326C | Aastra, Alcatel | </code>
По сути, существует несколько поставщиков УАТС, связанных с идентификатором клиента. Мне нужен этот дисплей в одной строке для системы поддержки.
Я пытался сделать это уже с CONCAT, но все, что я в итоге получаю - это одна строка с более чем 100 поставщиками, которые не относятся к Client_ID.
Любая помощь с очень высоко ценится!
A способ сделать это (также работает с 2005 года):
Сто
DECLARE @table TABLE
(
[Type_ID] INT,
[Client_ID] VARCHAR(50),
[PBX_Vendor] VARCHAR(50)
)
Данны
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'
Query
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]
Результа
Type_ID Client_ID PBX_Vendor
127 090820006311404926326C Aastra,Ericsson
127 111012237401404926326C Aastra
127 120209287521404926326C Aastra,Alcatel
мне удалось заставить это работать, используя твои оригинальные Идеи с некоторыми модификациями. Хотя я не могу сохранить его как представление, так как понимаю, что вы не можете сохранить ЗАЯВЛЯЕТСЯ как ПРОСМОТРЫ;
DECLARE @table TABLE
(
[Type_ID] INT,
[Client_ID] VARCHAR(50),
[PBX_Vendor] VARCHAR(50)
)
INSERT INTO @table
SELECT dbo.AMGR_User_Fields_Tbl.Type_Id, dbo.AMGR_User_Fields_Tbl.Client_Id, dbo.AMGR_User_Field_Defs_Tbl.Description AS PBX_Vendor
FROM dbo.AMGR_User_Fields_Tbl INNER JOIN
dbo.AMGR_User_Field_Defs_Tbl ON dbo.AMGR_User_Fields_Tbl.Type_Id = dbo.AMGR_User_Field_Defs_Tbl.Type_Id AND
dbo.AMGR_User_Fields_Tbl.Code_Id = dbo.AMGR_User_Field_Defs_Tbl.Code_Id
WHERE (dbo.AMGR_User_Fields_Tbl.Type_Id = 127)
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]