Sql server 返回逗号分隔列表并允许在其中搜索的查询
我的Sql server 返回逗号分隔列表并允许在其中搜索的查询,sql-server,sql-server-2008,csv,Sql Server,Sql Server 2008,Csv,我的MainTable有两个字段:MAIN\u ID和DESCRIPTION和SeoncdaryTable有两个字段:MAIN\u ID(FK到MainTable)和EXTRA\u INFO 我希望有一个查询,每个MainTable记录返回一条记录(select*from MainTable),另外还有一个结果,以逗号分隔的方式显示SecondaryTable的所有记录(当然要匹配MAIN\u ID) 此外,我希望在WHERE条件中能够筛选SecondaryTable字段 例如: MainTab
MainTable
有两个字段:MAIN\u ID
和DESCRIPTION
和SeoncdaryTable
有两个字段:MAIN\u ID
(FK
到MainTable
)和EXTRA\u INFO
我希望有一个查询,每个MainTable
记录返回一条记录(select*from MainTable
),另外还有一个结果,以逗号分隔的方式显示SecondaryTable
的所有记录(当然要匹配MAIN\u ID
)
此外,我希望在WHERE
条件中能够筛选SecondaryTable
字段
例如:
MainTable
:
MAIN\u ID
,说明
一,一
2,2
三,三
四,四
辅助表
主标识;额外信息
一,;阿尔法
一,;贝塔
一,;伽马射线
三,;贝塔
四,;阿尔法
四,;伽马射线
我想查询辅助表中包含GAMMA的所有记录,预期结果如下
一,;一,;α,β,γ
四,四,;阿尔法,伽马
如何实现这一点?您是否尝试过使用
STUFF
此命令将所有结果行填充到一列中,您可以在这里提供您选择的分隔符。您是否尝试过使用STUFF
此命令将所有结果行填充到一列中,在这里,您可以提供您选择的分隔符。我想不是。听起来不错,但是。。。我想不是。听起来不错,但是。。。从没听说过这些东西。感谢您的完整回复。@user-Stuff只是用来删除在第一个额外信息之前添加的额外,
。您可以使用子字符串
或右
。连接技巧是由xml路径(“”)
的完成的。从未听说过这些东西。感谢您的完整回复。@user-Stuff只是用来删除在第一个额外信息之前添加的额外,
。您可以使用子字符串
或右
。连接技巧是通过为xml路径(“”)
完成的。
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')