将子查询中的多个结果合并为一个逗号分隔值

将子查询中的多个结果合并为一个逗号分隔值

我有两张桌子:


TableA

------

ID,

Name


TableB

------

ID,

SomeColumn,

TableA_ID (FK for TableA)

这种关系是一排TableA- 许多TableB。


现在,我希望看到这样的结果:


ID     Name      SomeColumn


1.     ABC       X, Y, Z (these are three different rows)

2.     MNO       R, S

这不起作用(子查询中有多个结果):


SELECT ID,

       Name, 

       (SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID)

FROM TableA

如果我在客户端进行处理,这是一个微不足道的问题。但这意味着我必须在每个页面上运行X查询,其中X是结果的数量TableA。


请注意,我不能简单地执行GROUP BY或类似的操作,因为它将为行返回多个结果TableA。


我不确定使用COALESCE或类似东西的UDF是否可行?


蝴蝶不菲
浏览 1296回答 3
3回答

GCT1015

1.创建UDF:CREATE FUNCTION CombineValues(     @FK_ID INT -- The foreign key from TableA which is used                 -- to fetch corresponding records)RETURNS VARCHAR(8000)ASBEGINDECLARE @SomeColumnList VARCHAR(8000);SELECT @SomeColumnList =     COALESCE(@SomeColumnList + ', ', '') + CAST(SomeColumn AS varchar(20)) FROM TableB CWHERE C.FK_ID = @FK_ID;RETURN (     SELECT @SomeColumnList)END2.在子查询中使用:SELECT ID, Name, dbo.CombineValues(FK_ID) FROM TableA3.如果您使用存储过程,您可以这样做:CREATE PROCEDURE GetCombinedValues @FK_ID intAsBEGINDECLARE @SomeColumnList VARCHAR(800)SELECT @SomeColumnList =     COALESCE(@SomeColumnList + ', ', '') + CAST(SomeColumn AS varchar(20)) FROM TableBWHERE FK_ID = @FK_ID  Select *, @SomeColumnList as SelectedIds    FROM          TableA    WHERE          FK_ID = @FK_ID  END
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server