Sql 打印整列数字,每个数字的查询结果用逗号分隔

Sql 打印整列数字,每个数字的查询结果用逗号分隔,sql,sql-server,Sql,Sql Server,第一个查询: SELECT [name] FROM [MyDB].[dbo].[abcCategories] where categoryID in (SELECT categoryId FROM [MyDB].[dbo].[CategorySets] where setId='123456') 我得到 号码是“123456” 正在从第二个查询中获取: SELECT [setId] FROM [MyDB].[dbo].[CategoryS

第一个查询:

 SELECT [name]
 FROM [MyDB].[dbo].[abcCategories]
 where categoryID in (SELECT categoryId FROM [MyDB].[dbo].[CategorySets]
                      where setId='123456')
我得到

号码是“123456” 正在从第二个查询中获取:

SELECT [setId]   
FROM [MyDB].[dbo].[CategorySets]
这将返回一列中的所有数字:

12
123
1234
12345
123456
1234567
12345678
所以现在我需要对第二个查询中的所有值执行第一个查询。 我想在一列中打印所有这些数字,在下一列中相应地打印第一次查询的结果,并用逗号分隔:

12       | abc, xyz, asdf,abc
123      | ..., ...,....,...
1234     | asfa,fdasf,asdfsa,sdfa
.....    |
123456   | keyword1,keyword2,keyword3,keyword4,keyword5
......   |
12345678 | keyword6, keyword 7

我怎样才能存档呢?

这样就行了。。用于将名称列用逗号分隔的XML路径。以及删除第一个逗号的内容

;WITH CTE AS(
SELECT C.[setId] , AC.[name]
FROM [MyDB].[dbo].[abcCategories] AC
INNER JOIN [MyDB].[dbo].[CategorySets] C ON AC.categoryID= C.categoryId

)
SELECT C1.[setId]
, STUFF((SELECT ','+C2.[name] FROM CTE C2 
WHERE C1.[setId] = C2.[setId] FOR XML PATH('') ),1,1,'')
FROM CTE C1 

您使用的是SQL Server吗?是的,我使用的是MS SQL Server Coalesce可能就是您要找的。仅在这样的变量中使用它:从该表中选择@variable=ISNULL(@variable,)+Column+(某些理论)。这有助于在第一个查询中添加逗号。但是我的问题有点复杂。我需要在第二次查询中对所有数字进行第一次查询(它将“setId='123456'”替换为“sencond query'中的setId”)。还需要打印第二次查询的所有列以及上述结果。这是核心思想,即如何处理该案例。我没有你的表格和数据。但是你可以通过修改上面的查询和其他列来实现它。实际上我知道如何用逗号分隔结果。但是如何组合两个查询结果呢?上面的代码只会在组合后给出结果。喜欢你想要的作品
123456 |关键字1、关键字2、关键字3、关键字4、关键字5
。如果您为实际的模式提供数据,将给出正确的要求,那么它不会同时给出两列,只给出1个值“123456”。我提供了所有必需的信息:第一次查询,第二次查询。结果如何返回到每个。现在我问的是如何将两者结合起来。
;WITH CTE AS(
SELECT C.[setId] , AC.[name]
FROM [MyDB].[dbo].[abcCategories] AC
INNER JOIN [MyDB].[dbo].[CategorySets] C ON AC.categoryID= C.categoryId

)
SELECT C1.[setId]
, STUFF((SELECT ','+C2.[name] FROM CTE C2 
WHERE C1.[setId] = C2.[setId] FOR XML PATH('') ),1,1,'')
FROM CTE C1