我的SQL表有三列:SQL查詢 - 由三列
TaskID VarID Hours 001 001 10 001 002 40 001 003 100 002 001 50 002 002 80 002 003 90
我要產生如以下
TaskID VarID -> 001 002 003 001 10 40 100 002 50 80 90
我想輸出有一些查詢或功能可以幫助我做到這一點。有任何想法嗎?
我的SQL表有三列:SQL查詢 - 由三列
TaskID VarID Hours 001 001 10 001 002 40 001 003 100 002 001 50 002 002 80 002 003 90
我要產生如以下
TaskID VarID -> 001 002 003 001 10 40 100 002 50 80 90
我想輸出有一些查詢或功能可以幫助我做到這一點。有任何想法嗎?
是的,你可以很容易地在SQL Server 2005中做到這一點 - 神奇的詞是PIVOT
。
這裏有您需要查詢:
SELECT
TaskID,
[001], [002], [003]
FROM
YourTable
PIVOT
(
SUM(HOURS)
FOR VarID IN ([001], [002], [003])
)
AS YourPivot
ORDER BY
YourPivot.TaskID
透視表的想法是有點棘手,在第一神交 - 也許這些信息的其他來源將幫助:
從MSDN的解釋可能會提供一些線索:
您可以使用PIVOT和UNPIVOT 關係運算符來改變 表值表達式到另一個 表。 PIVOT通過從一個列中的輸出轉動獨特 值在 表達爲多列在 旋轉的表值 表達,並且執行在那裏它們被要求在該是 希望在最終的任何 其餘列值聚合 輸出。 UNPIVOT 通過將 表值表達式的列轉換爲 值來執行與 PIVOT相反的操作。
所以你基本上可以帶可變VarID
並把它的不同的值(001,002,003)及以上的合計(SUM(小時))到一個新的「支點」表的列。
Marc
您需要一個交叉表查詢。不幸的是,這在SQL Server中並不容易。在MS Access中非常容易(有一個嚮導可以幫助您。)
您需要使用PIVOT功能。我使用一個存儲過程是這樣的:
CREATE PROCEDURE [dbo].[usp_pivot_sa_byHomeCare] AS
DECLARE @columns VARCHAR(1000)
SELECT @columns = COALESCE(@columns + ',[' + cast(HomeCareRating as varchar) + ']',
'[' + cast(HomeCareRating as varchar)+ ']')
FROM vw_sa_byHomeCare
GROUP BY HomeCareRating
--print @columns
DECLARE @query VARCHAR(8000)
SET @query = '
SELECT *
FROM vw_sa_byHomeCare
PIVOT
(
sum(count_pmin)
FOR [HomeCareRating]
IN (' + @columns + ')
)
AS p'
--print @query
EXECUTE(@query)
在我的視圖(vw_sa_byHomeCare)是我想轉動的觀點,HomeCareRating是轉動在列,總和(count_pmin)是我的價值。