[英]How to convert rows to column in T-SQL, and write it in a temp table?
這可能是一個問題。
我的疑問是
SELECT Year, Month, Line, SUM(value) as total FROM myTable
我有以下查詢結果表:
Year Month Line Total
-------------------------------------------
2011 2 B1 5203510.00
2011 3 B1 2228850.00
2011 4 B1 7258075.00
2011 5 B1 6305370.00
2011 6 B1 5540180.00
2011 7 B1 7624430.00
2011 8 B1 4042300.00
2011 9 B1 3308870.00
2011 10 B1 4983875.00
2011 11 B1 4636500.00
2011 12 B1 3987350.00
2012 1 B1 518400.00
我想要以下內容:
Year Line Jan Feb Mar Apr ..... December
2011 B1 0 52035 2228 725 ..... 3987350
2012 B1 51840 ... ... ....
請問,您能幫我解決如何將查詢SQL從行轉換為列的問題嗎?
基本上,您需要PIVOT數據。 有關如何執行此操作的SO有幾個示例。 棘手的部分是將month number
轉換為month name
。
這在DATENAME(month, DateAdd(month, [Month], 0)-1)
的示例中完成DATENAME(month, DateAdd(month, [Month], 0)-1)
SQL語句
SELECT *
FROM (
SELECT Year, Line, Total, mnt = DATENAME(month, DateAdd(month, [Month], 0)-1)
FROM myTable
) mt
PIVOT (MAX(Total) FOR [mnt] IN ([January],[February],[March],[April],[May],[June],[July],[August],[September],[October],[November],[December])) AS PVT
測試腳本
;WITH myTable AS (
SELECT * FROM (VALUES
(2011 , 2 , 'B1', 5203510.00)
, (2011 , 3 , 'B1', 2228850.00)
, (2011 , 4 , 'B1', 7258075.00)
, (2011 , 5 , 'B1', 6305370.00)
, (2011 , 6 , 'B1', 5540180.00)
, (2011 , 7 , 'B1', 7624430.00)
, (2011 , 8 , 'B1', 4042300.00)
, (2011 , 9 , 'B1', 3308870.00)
, (2011 , 10 , 'B1', 4983875.00)
, (2011 , 11 , 'B1', 4636500.00)
, (2011 , 12 , 'B1', 3987350.00)
, (2012 , 1 , 'B1', 518400.00)
) AS myTable (Year, Month, Line, Total)
)
SELECT *
FROM (
SELECT Year, Line, Total, mnt = DATENAME(month, DateAdd(month, [Month], 0)-1)
FROM myTable
) mt
PIVOT (MAX(Total) FOR [mnt] IN ([January],[February],[March],[April],[May],[June],[July],[August],[September],[October],[November],[December])) AS PVT
你要做的是轉動數據。 我將只使用Month和Total(相關)列。
如果您使用的是MS SQL 2008或更高版本:
SELECT [1] AS Jan, [2] AS Feb, .. [12] AS Dec,
Total
FROM ( SELECT Month, Total FROM tableA ) AS SOURCE
PIVOT
( MAX(Total) AS Total
FOR
Month IN ([1],[2],...[12]) ) AS PIVOT
PIVOT是您尋求的T-SQL關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.