關於第一個問題:
SELECT A.ID, A.Name, COUNT(ab.B_ID) AS bcount
FROM A LEFT JOIN A_B_Link ab ON (ab.A_ID = A.ID)
GROUP BY A.ID, A.Name;
這個輸出每行A的一行,匹配B的計數。請注意,您必須在GROUP BY語句中列出A的所有列;這裏沒有辦法使用通配符。
另一種解決方案是使用相關子查詢,如@Ray Booysen顯示:
SELECT A.*,
(SELECT COUNT(*) FROM A_B_Link
WHERE A_B_Link.A_ID = A.A_ID) AS bcount
FROM A;
這工作,但相關子查詢是不是性能非常好。
對於你的第二個問題,你需要像MySQL的GROUP_CONCAT()
聚合函數。在MySQL中,你可以得到一個逗號分隔的B.Name
列表每行A的是這樣的:
SELECT A.*, GROUP_CONCAT(B.Name) AS bname_list
FROM A
LEFT OUTER JOIN A_B_Link ab ON (A.ID = ab.A_ID)
LEFT OUTER JOIN B ON (ab.B_ID = B.ID)
GROUP BY A.ID;
有沒有簡單的等價物在Microsoft SQL Server。在這裏檢查另一個關於這個問題: 「Simulating group_concat MySQL function in MS SQL Server 2005?」
或谷歌的'microsoft SQL server "group_concat"'的各種其他解決方案。
你應該在堆棧溢出上發佈兩個問題 - 你的問題不相關,你不會得到像這樣分組的好答案。 – 2009-01-26 18:21:18