为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2019-08-17 15:22:49
将子查询中的多个结果合并为一个逗号分隔值我有两张桌子: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


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 1250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信