有類似的問題here,here回答計算器。
您需要使用運營商PIVOT在查詢中acheive this.Here是你如何能做到that.The例如從this源引用的例子和說明。
---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ('+ @cols +'))
AS pvt;'
EXECUTE(@query)
說明
1.查詢的第一部分
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
爲您提供您的姓名列值的一個很好的扁平結果單行如下
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
你可以用lea更多關於STUFF和XML路徑here和here。
2. SELECT + @cols + FROM
將選擇所有的行作爲coloumn名字最終結果集(PVT - 步驟3)
即
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3。這個查詢拉出了我們創建交叉表結果所需的所有數據行。第(p)在查詢之後創建,然後可以用來滿足查詢步驟1.
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4. PIVOT表達
PIVOT (MAX (Count) FOR Name IN (@cols) AS pvt
結果的臨時表執行實際總結並將結果放置到名爲PVT一個臨時表作爲
Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76
+1,很好的解決方案和答案。請注意,「TOP 100 PERCENT」可以更改爲「TOP 30」或其他任何內容,因此如果行數很多,則不會超過列數。 – 2010-02-26 21:03:44