2015-06-30 2 views
1

Я хочу выбрать данные из таблицы (SQL Server 2012) - группировать одно поле и возвращать все дубликаты в этой группе в виде списка, разделенного запятыми.Возвращает значения таблицы как список, разделенный запятой, в GROUP BY

Все решения, которые я видел до сих пор, не позволяют группе и возвращают единый список, разделенный запятой, для всей таблицы как переменной, которая не работает для меня.

Какой SQL мне нужен?

Это данные у меня есть:

BankingSlipID CashSheetSessionID BankingSlipNumber 
1    10     abcabc 
2    10     xyzxyz 
3    10     123465789 
4    11     9999999 
5    11     55555 
6    12     88888 

Это то, что я хочу получить:

CashSheetSessionID BankingSlipNumber 
10     abcabc, xyzxyz, 123465789 
11     9999999, 55555 
12     88888 

SQL для создания таблицы источника (с данными):

CREATE TABLE [dbo].[BankingSlips](
[BankingSlipID] [int] IDENTITY(1,1) NOT NULL, 
[CashSheetSessionID] [int] NOT NULL, 
[BankingSlipNumber] [varchar](50) NOT NULL 
) ON [PRIMARY] 
GO 
SET IDENTITY_INSERT [dbo].[BankingSlips] ON 
GO 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (1, 10, N'abcabc') 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (2, 10, N'xyzxyz') 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (3, 10, N'123465789') 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (4, 11, N'9999999') 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (5, 11, N'55555') 
INSERT [dbo].[BankingSlips] ([BankingSlipID], [CashSheetSessionID], [BankingSlipNumber]) VALUES (6, 12, N'88888') 
SET IDENTITY_INSERT [dbo].[BankingSlips] OFF 
GO 

Какой SQL мне нужно написать, чтобы получить это?

ответ

1

Использование STUFF

SELECT CashSheetSessionID, BankingSlipNumber = 
    STUFF((SELECT ', ' + BankingSlipNumber 
      FROM BankingSlips b 
      WHERE b.CashSheetSessionID = a.CashSheetSessionID 
      FOR XML PATH('')), 1, 2, '') 
FROM BankingSlips a 
GROUP BY CashSheetSessionID 

Выход:

CashSheetSessionID BankingSlipNumber 
10     abcabc, xyzxyz, 123465789 
11     9999999, 55555 
12     88888 

SQL Скрипки: http://sqlfiddle.com/#!3/1d728b/4/0

Смежные вопросы