【问题标题】:Transform existing SQL into a pivot by column [duplicate]按列将现有 SQL 转换为数据透视表 [重复]
【发布时间】:2015-05-28 11:31:30
【问题描述】:

以下 SQL 输出 3 列:

  1. 日期(第 1 列)YYYY-DD
  2. MeterReadTypeDescription
  3. 总计

日期重复,因为MeterReadTypeDescription可能有一个或多个

我想要的是能够旋转,以便数据具有每个 MeterReadTypeDescription 的动态列标题,并且低于总计。这意味着第一列中的日期将是唯一的

如何根据 MeterReadTypeDescription 旋转此 SQL?

SELECT 
  convert(char(7), MeterReadDate, 121),
  MeterReadTypes.MeterReadTypeDescription, 
  count(*) as total    
FROM 
  [PremiseMeterReadProviders],
  MeterReadTypes    
WHERE 
  [PremiseMeterReadProviders].MeterReadTypeId = MeterReadTypes.MeterReadTypeId 
  and (MeterReadDate > dateadd(m,-12,getdate()))
GROUP BY
  convert(char(7), MeterReadDate, 121),
  MeterReadTypes.MeterReadTypeDescription
ORDER BY 
  convert(char(7), MeterReadDate, 121)

【问题讨论】:

标签: sql sql-server pivot


【解决方案1】:

搞定了(感谢 igloo 提供的链接)...

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT distinct 
                        ',' +
                        QUOTENAME(MeterReadType)
                 FROM MeterReadView with (nolock)
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = ' SELECT MeterReadMonth as Month,  ' + @cols + ' 

FROM 
(
   SELECT MeterReadType, MeterReadMonth,isnull(total,0) as total
   FROM [MeterReadView] with (nolock)
) t
PIVOT
( 
  sum(total)
  FOR MeterReadType IN (' + @cols + ' )
) 
p ' ;

Execute(@query);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多