我有一個表,如:SQL FOR XML路徑列表COUNT
|Date |Name|
--------------------
|'20-May-2011'|Bob |
|'20-May-2011'|Fred|
|'20-May-2011'|Jim |
|'21-May-2011'|Bob |
|'21-May-2011'|Ed |
|'22-May-2011'|Bill|
我需要一個查詢返回:
|Date |Count|Names |
--------------------------------------
|'20-May-2011'| 3|'Bob, Fred, Jim'|
|'21-May-2011'| 2|'Bob, Ed' |
|'22-May-2011'| 1|'Bill' |
換句話說,我希望有一個列表和計數按日期排列的名稱。 我能想出的最好的是:
SELECT list.[Date], [Count], [Names]
FROM (
SELECT [Date],
STUFF((
SELECT ', ' + [Name]
FROM #table t2
WHERE t2.[Date] = t.[Date]
ORDER BY [Name]
FOR XML PATH('')
), 1, 2, '') AS [Names]
FROM #table t
GROUP BY [Date]
) [list]
INNER JOIN (
SELECT [Date],
COUNT(*) AS [Count]
FROM #table t
GROUP BY [Date]
) [count]
ON list.[Date] = count.[Date]
ORDER BY [Count] DESC, list.[Date]
是否有一個更優雅的查詢?
不,我不認爲現在有什麼比這更簡單或更「優雅」的SQL Server代碼 – 2011-05-20 15:49:39
勞倫斯,我不確定你的意思。這是交易SQL直接對服務器執行.. – 2011-05-20 16:24:06
我基本上想知道是否有可能在一個查詢中做到這一點,而不是兩個子查詢連接在一起。 – 2011-05-20 16:24:46