将子查询中的多个结果合并为一个逗号分隔值我有两张桌子:TableA------ID,NameTableB------ID,SomeColumn,TableA_ID (FK for TableA)这种关系是一排TableA- 许多TableB。现在,我希望看到这样的结果:ID Name SomeColumn1. 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是否可行?
3 回答
GCT1015
TA贡献1827条经验 获得超4个赞
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)END
2.在子查询中使用:
SELECT ID, Name, dbo.CombineValues(FK_ID) FROM TableA
3.如果您使用存储过程,您可以这样做:
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
- 3 回答
- 0 关注
- 1295 浏览
添加回答
举报
0/150
提交
取消