2011-08-29 46 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功能是擺脫最終', '這將在年底追加的。

您還可以在這裏看到另一個例子: