返回逗号分隔列表并允许在其中搜索的查询

时间:2011-08-23 10:36:27

标签: sql-server sql-server-2008 csv

我有MainTable个字段:MAIN_IDDESCRIPTION以及SeoncdaryTable有2个字段:MAIN_IDFK到{{1 }}和MainTable

我希望有一个查询,每EXTRA_INFO条记录(MainTable)返回一条记录,另外还有一个结果以逗号分隔的方式显示select * from MainTable的所有记录当然要对SecondaryTable)进行处理。

此外,我希望MAIN_ID条件能够过滤WHERE个字段。

示例:

SecondaryTable

MainTableMAIN_ID

1,一个

2,两个

3,三

4,四

中学表

MAIN_ID; EXTRA_INFO;

1; ALPHA

1; BETA

1; GAMMA

3; BETA

4; ALPHA

4; GAMMA

我想查询辅助表包含GAMMA的所有记录,预期结果是

1;一; ALPHA,BETA,GAMMA

4,四; ALPHA,GAMMA

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

declare @MainTable table (MAIN_ID int identity, [DESCRIPTION] varchar(10));
insert into @MainTable values('One'),('Two'),('Three'),('Four'),('Five');

declare @SecondaryTable table (MAIN_ID int, EXTRA_INFO varchar(10));
insert into @SecondaryTable values
(1, 'ALPHA'), (1, 'BETA'), (1, 'GAMMA'), (3, 'BETA'), (4, 'ALPHA'), (4, 'GAMMA');

select MT.MAIN_ID,
       MT.[DESCRIPTION],
       stuff((select ', '+ST.EXTRA_INFO
              from @SecondaryTable as ST
              where MT.MAIN_ID = ST.MAIN_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 2, '') as EXTRA_INFO
from @MainTable as MT
where MT.MAIN_ID in (select MAIN_ID      
                     from @SecondaryTable
                     where EXTRA_INFO = 'GAMMA')

答案 1 :(得分:0)

你曾尝试使用STUFF这个命令将所有结果行填充到一个列中,在这里你可以提供你选择的分隔符。