爲此,您將需要一張表,而不使用任何遊標或動態創建列。解決的辦法是轉動的結果得到最終的輸出
2010-10 2010-11 2010-12 2011-1...
50 100 25 70
即年份和月份是什麼使列獨特的總和整個月完成,並放置在正確的列的組合。快速出現的一個問題是使用PIVOT
時,需要列出列名。例如... PIVOT (SUM(Harvest)) FOR ([2011-10], [2011-11]...
,但我們可以使用STUFF
和XML Path
來避免這一切。
這是你可以做的,我使用了TEMP表,但是你可以改變它來引用你的真實表。首先表:
CREATE TABLE #Test
(
[ID] [int] IDENTITY(1,1) NOT NULL,
TheDate datetime,
Harvest int
)
然後插入一些虛擬的數據:
INSERT INTO #Test(TheDate, Harvest) VALUES ('10/11/2011', 50)
INSERT INTO #Test(TheDate, Harvest) VALUES ('10/11/2012', 100)
INSERT INTO #Test(TheDate, Harvest) VALUES ('10/1/2011', 20)
INSERT INTO #Test(TheDate, Harvest) VALUES ('12/11/2011', 50)
INSERT INTO #Test(TheDate, Harvest) VALUES ('11/11/2011', 50)
INSERT INTO #Test(TheDate, Harvest) VALUES ('11/12/2011', 150)
顯示結果:
SELECT * FROM #Test
結果是:
ID TheDate Harvest
1 2011-10-11 00:00:00.000 50
2 2012-10-11 00:00:00.000 100
3 2011-10-01 00:00:00.000 20
4 2011-12-11 00:00:00.000 50
5 2011-11-11 00:00:00.000 50
6 2011-11-12 00:00:00.000 150
這裏就是神奇發生:
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT @listCol = STUFF((
SELECT DISTINCT
],[' + ltrim(str(YEAR(TheDate))) +
'-' + CAST (MONTH(TheDate) as varchar(50))
FROM
#Test
ORDER BY
'],[' + ltrim(str(YEAR(TheDate))) + '-' +
CAST(MONTH(TheDate) as varchar(50))
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(SELECT
ltrim(str(YEAR(TheDate))) +
''-'' + CAST (MONTH(TheDate) as varchar(50)) AS TheCol,
Harvest
FROM
#Test
) src
PIVOT (SUM(Harvest) FOR TheCol
IN ('[email protected]+')) AS pvt'
然後執行此查詢:
EXECUTE (@query)
結果:
2011-10 2011-11 2011-12 2012-10
70 200 50 100
而且不要忘記擺脫臨時表
DROP TABLE #Test
的
請記住我正在使用我的測試數據,因此您可以隨意添加。這是一切的圖形輸出:
![enter image description here](https://i.stack.imgur.com/XQ4hL.png)
這聽起來是可行的,但可怕的你能不能給更喜歡啥子你正在嘗試做的信息。我們可以通過插入一個共同的臨時表,然後基於一個月或日期進行旋轉。 – JonH
好的,我有一個名爲「生產」的數字,根據一個叫做「收穫月份」的時間,我將其按月分配。 例如: 生產=>收穫日期 100 => '2010/10/02' 200 => '2011/11/01' 100 => '2012/10/10' 的結果集將是 「Production」=> 2010-10 => = 2011-11> 2012-10 400 => 100 => 200 => 100 – ale
我不相信您可以擁有相同的列名稱。每個都需要獨特。所以,你必須有其他的價值來確保你有一個唯一的列名。或者你可以有1 - 12月和1年的列,所以你總共有13列,每年一行(如果這符合你的模型)。 – Vinnie