我有MainTable
个字段:MAIN_ID
和DESCRIPTION
以及SeoncdaryTable
有2个字段:MAIN_ID
(FK
到{{1 }}和MainTable
。
我希望有一个查询,每EXTRA_INFO
条记录(MainTable
)返回一条记录,另外还有一个结果以逗号分隔的方式显示select * from MainTable
的所有记录当然要对SecondaryTable
)进行处理。
此外,我希望MAIN_ID
条件能够过滤WHERE
个字段。
示例:
SecondaryTable
:
MainTable
,MAIN_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如何实现这一目标?
答案 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
这个命令将所有结果行填充到一个列中,在这里你可以提供你选择的分隔符。