SQL Server将选择查询作为一个选择列的一部分

时间:2011-08-29 15:46:55

标签: sql sql-server sql-server-group-concat

嘿,我只是想知道以下是否可能

select id, name, (select name from secondTable where companyId = tableOne.id) as concatenatedString..
from tableOne

所以我要查找的是对于tableOne中的每个记录返回,在另一个表中执行查找并返回此记录id的所有值。 (另一个表是查找表,因此每个id可能有1个或多个条目)。如果子查询中返回的值超过1,则构建单个字符串值,并以逗号分隔。

所以返回数据看起来像

1  Microsoft Bill,Gate,Jack
2  Apple     Jobs

2 个答案:

答案 0 :(得分:1)

您想使用FOR XML PATH construct:

select 
    ID, 
    Name,
    stuff((select ', ' + Name
           from secondTable where companyId = tableOne.id 
           for xml path('')),
          1,2,'') [Names]
from tableOne

STUFF函数用于删除最后附加的', '

您还可以在此处查看其他示例:

答案 1 :(得分:0)

我不确定你为什么要跳过连接,因为它会使你的查询更加灵活。如果您热衷于使用子选择,可以通过选择一个表来执行此操作:

SELECT t1.id, t1.name, t2.name
FROM   tableOne t1
INNER JOIN (select id, name from secondTable) AS t2
on t1.id = t2.id

当然,如果您所做的只是加入ID,安倍的回答会更有意义。

如果您希望在select返回多列的情况下对其进行聚合,则可以使用GROUP BY t1.id,t1.name。