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日,但是,您是否有任何想法来改进这一点,并自动进行此操作,而不是每个月都要更改一次?
您打算如何命名列? – DVT
可能是从M01到M12 ... –
如果您想要动态命名列,[您需要使用动态SQL](https://www.mssqltips.com/sqlservertip/2783/script-to-创建动态枢轴查询功能于SQL服务器/)。或者,您可以将规范化的分组数据返回给消费者,并且*他们*可以转发数据。 –