2016-08-29 79 views
2

我在SQL中擁有此表。 [Tbl_SALES]SQL查詢 - 基於當前日期的動態月份更改

+-------------+-----------+-------------+---------+-------+------+-------+ 
| Cust_Number |Code_Number| PartNumber | UserID | Month | Year | Sales | 
+-------------+-----------+-------------+---------+-------+------+-------+ 
|  5535536 |  101 | AB11111  | Luis | Aug | 16 | 100 | 
|  9256819 |  101 | AV11111  | Luis | Aug | 16 | 100 | 
|  4369983 |  101 | AX11111  | Luis | Aug | 16 | 100 | 
|  5535536 |  101 | AB11111  | Luis | Sep | 16 | 200 | 
|  9256819 |  101 | AV11111  | Luis | Sep | 16 | 200 | 
|  4369983 |  101 | AX11111  | Luis | Sep | 16 | 200 | 
|  5535536 |  101 | AB11111  | Luis | Oct | 16 | 100 | 
|  4369983 |  101 | AX11111  | Luis | Oct | 16 | 200 | 
|  6441842 |  101 | AA11111  | Luis | Oct | 16 | 200 | 
|  5535536 |  101 | AB11111  | Luis | Nov | 16 | 100 | 
|  5535536 |  101 | AB11111  | Luis | Dec | 16 | 100 | 
|  6441842 |  101 | AA11111  | Luis | Dec | 16 | 100 | 
|  5535536 |  101 | AB11111  | Luis | Jan | 17 | 100 | 
|  6441842 |  101 | AA11111  | Luis | Jan | 17 | 100 | 
|  4369983 |  101 | AX11111  | Luis | Feb | 17 | 300 | 
|  6441842 |  101 | AA11111  | Luis | Feb | 17 | 100 | 
+-------------+-----------+-------------+---------+-------+------+-------+ 

我需要將Month行轉換爲Columns。 我有這個SQL查詢,轉置所有月份正確。

SELECT 
[Cust_Number], 
[Code_Number], 
[PartNumber], 
[UserID], 
SUM([Aug'16]) as [Aug'16], 
SUM([Sep'16]) as [Sep'16], 
SUM([Oct'16]) as [Oct'16], 
SUM([Nov'16]) as [Nov'16], 
SUM([Dec'16]) as [Dec'16], 
SUM([Jan'17]) as [Jan'17], 
SUM([Feb'17]) as [Feb'17], 
SUM([Mar'17]) as [Mar'17], 
SUM([Apr'17]) as [Apr'17], 
SUM([May'17]) as [May'17], 
SUM([Jun'17]) as [Jun'17], 
SUM([Jul'17]) as [Jul'17] 
FROM (
SELECT 
[Cust_Number], 
[Code_Number], 
[PartNumber], 
[UserID], 
case when ([MONTH] = 'Aug') then SUM([SALES]) else Null end as [Aug'16], 
case when ([MONTH] = 'Sep') then SUM([SALES]) else Null end as [Sep'16], 
case when ([MONTH] = 'Oct') then SUM([SALES]) else Null end as [Oct'16], 
case when ([MONTH] = 'Nov') then SUM([SALES]) else Null end as [Nov'16], 
case when ([MONTH] = 'Dec') then SUM([SALES]) else Null end as [Dec'16], 
case when ([MONTH] = 'Jan') then SUM([SALES]) else Null end as [Jan'17], 
case when ([MONTH] = 'Feb') then SUM([SALES]) else Null end as [Feb'17], 
case when ([MONTH] = 'Mar') then SUM([SALES]) else Null end as [Mar'17], 
case when ([MONTH] = 'Apr') then SUM([SALES]) else Null end as [Apr'17], 
case when ([MONTH] = 'May') then SUM([SALES]) else Null end as [May'17], 
case when ([MONTH] = 'Jun') then SUM([SALES]) else Null end as [Jun'17], 
case when ([MONTH] = 'Jul') then SUM([SALES]) else Null end as [Jul'17] 

FROM [Test].[dbo].[Tbl_SALES] 
where [UserID] = 'Luis' 
group by 
[Cust_Number], 
[Code_Number], 
[PartNumber], 
[UserID], 
[MONTH] 
) a 
group by 
[Cust_Number], 
[Code_Number], 
[PartNumber], 
[UserID] 

查詢結果。

+---------------+-------------+-------------+------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+----------+ 
| Cust_Name  | Code_Number | PartNumber | User | Aug'16 | Sep'16 | Oct'16 | Nov'16 | Dec'16 | Jan'17 | Feb'17 | Mar'17 | Apr'17 | May'17 | Jun'17 | Jul'17 | | 
+---------------+-------------+-------------+------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+----------+ 
|  5535536 |   101 | AB11111  | Luis | 100 | 200 | 100 | 100 | 100 | 100 |  |  |  |  |  |   | 
|  9256819 |   101 | AV11111  | Luis | 100 | 200 |  |  |  |  |  |  |  |  |  |   | 
|  4369983 |   101 | AX11111  | Luis | 100 | 200 | 200 |  |  |  | 300 |  |  |  |  |   | 
|  6441842 |   101 | AA11111  | Luis |  |  | 200 |  | 100 | 100 | 100 |  |  |  |  |   | 
+---------------+-------------+-------------+------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+----------+ 

考慮到以前的查詢...我怎樣才能使這個查詢動態基於當前日期? 假設今天是2016年8月29日,那麼案例列表中的第一個月應該是8月16日,但是,您是否有任何想法來改進這一點,並自動進行此操作,而不是每個月都要更改一次?

+0

您打算如何命名列? – DVT

+0

可能是從M01到M12 ... –

+2

如果您想要動態命名列,[您需要使用動態SQL](https://www.mssqltips.com/sqlservertip/2783/script-to-創建動態樞軸查詢功能於SQL服務器/)。或者,您可以將規範化的分組數據返回給消費者,並且*他們*可以轉發數據。 –

回答

相關問題