SQL透视表,条件上有多个透视表

2022-03-02 00:00:00 pivot pivot-table sql aggregate sql-server
这是我的数据集,

它有一个预订(唯一ID)、一个保留_dt、一个会计年度(大多数情况下都是同一年)、月份(包括数字和名称)以及一个预订状态,然后它有总保留数,后面跟一个计数器(基本上是 每个预订行1)

这些是我的指导方针(需要按月转为栏目)

  • 请求-所有不同预订的计数
  • NUM_REQUESTED(SUM TOTAL_NUMBER_REQUESTED BY月)
  • 已预订(所有不同预订状态的计数为已创建订单) 状态为已创建订单的NUM_BOOKED(SUM TOTAL_NUMBER_REQUESTED BY MONTH)
  • NOT_BOOKED(状态为未履行的所有不同预订的计数)
  • NOT_NUM_BOOKED,(状态为未完成的月份SUM TOTAL_NUMBER_REQUESTED)

我希望将此转换为数据透视表,这就是到目前为止我得到的信息,但无法找出它无法工作的原因。

我想我应该使用SUM(TOTAL_NUMBER_REQUESTED)或COUNT(TOTAL_REQUESTED)将上面的每条指南都变成一个列,其中预订状态是.诸如此类。 我愿意接受任何其他想法,让它变得更简单、更有效。

SELECT [month_name],
       fyear AS fyear,
       Requested,
       Num_Requested
FROM (SELECT reservation,
             reservation_status,
             total_number_requested,
             fyear,
             [month_name],
             [month],
             total_requested
      FROM #temp2) SourceTable
PIVOT (SUM(total_number_requested)
       FOR reservation_status IN ([Requested])) PivotNumbRequested PIVOT(COUNT(reservation)
       FOR total_requested IN ([Num_Requested])) PivotCountRequested
WHERE [month] = 7
ORDER BY fyear,
         [month];

解决方案

使用条件表达式模拟数据透视。示例:

SELECT fyear, Month, Monthname, Count(*) AS CountALL, Sum(total_number_requested) AS TotNum, 
Sum(IIf(reservation_status = "Order Created", total_number_Requested, Null)) AS SumCreated
FROM tablename
GROUP BY fyear, Month, MonthName

更多信息:
SQLServer - Multiple PIVOT on same columns
Crosstab Query on multiple data points

相关文章