Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 返回逗号分隔列表并允许在其中搜索的查询_Sql Server_Sql Server 2008_Csv - Fatal编程技术网

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')