2011-08-29 70 views
1

嘿我只是想知道的部分,如果下面是可能SQL服务器有一个选择查询作为一个选择栏

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

所以我要寻找的选择做的是在tableOne每个记录回报,在另一个表中执行查找并返回此记录ID的所有值。 (另一个表是查找表,所以每个ID可能有1个或更多的条目)。如果在子查询中返回多个值以构建单个字符串值(用逗号分隔)。

这样即返回的数据会看起来像

1 Microsoft Bill,Gate,Jack 
2 Apple  Jobs 

回答

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。

+1

OP要显示 “第三列” 作为一个逗号分隔值的字符串。每个公司都会有多条生产线,员工数量也是如此 –

1

你想用FOR XML PATH结构:

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

STUFF功能是摆脱最终', '这将在年底追加的。

您还可以在这里看到另一个例子: