sql-server SQL按月ID创建列标题

fjaof16o  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(152)

我试图提取过去12个月的明细销售数据,并为每个月ID创建一个带有列标题的动态表。按以下方法提取数据是可行的,但当我为每个月ID创建一个SUM列时,我卡住了。我曾尝试找到类似的问题,但我不确定最佳方法。

Select Item, Qty, format(Transaction Date,'MMM-yy')
from Transactions

数据提取:
| 项目名称|数量|月份ID|
| - -|- -|- -|
| 阿123|五十个|四月二十二日|
| 阿123| 30个|五月二十二日|
| 阿123|五十个|2022年6月|
| A321运输机|五十个|四月二十二日|
| 小行星A999|二十五个|五月二十二日|
| A321运输机|10个|2022年6月|
所需输出:
| 项目名称|四月二十二日|五月二十二日|2022年6月|
| - -|- -|- -|- -|
| 阿123|五十个|30个|五十个|
| A321运输机|五十个|空值|10个|
| 小行星A999|空值|二十五个|空值|
如有任何建议,我们将不胜感激。

mm9b1k5b

mm9b1k5b1#

这是透视操作的典型情况,您可以

  • 首先根据您的“Month_ID”值筛选每个值
  • 然后在公共“Item”上聚合
WITH cte AS (
    SELECT Item, Qty, FORMAT(Transaction Date,'MMM-yy') AS Month_ID
    FROM Transactions
)
SELECT Item, 
       MAX(CASE WHEN Month_ID = 'Apr-22' THEN Qty END) AS [Apr-22],
       MAX(CASE WHEN Month_ID = 'May-22' THEN Qty END) AS [May-22],
       MAX(CASE WHEN Month_ID = 'Jun-22' THEN Qty END) AS [Jun-22]
FROM cte
GROUP BY Item

注意:只要每对〈"Item",“Month-Year"〉只有一个值,就不需要SUM

相关问题