使用联合在 sql 查询中进行透视

Pivot in sql query using union

这个查询有什么问题:

 select * from ( select [date],CountType,[Count]  from(

select COUNT(Id) as [Count],'TotalCustomer' as CountType, cast(DATEADD(day,3,[JobCardDate])as date) as [date] FROM [Honda_db].[dbo].[Post Service Feedback] 
where cast(DATEADD(day,3,[JobCardDate]) as date) between '2015-11-26' and  '2015-12-26' group by cast(DATEADD(day,3,[JobCardDate]) as date)
 union  
select COUNT(Id) as [Count],'NotCalled' as CountType, cast(DATEADD(day,3,[JobCardDate]) as date) as [Date] from [Honda_db].[dbo].[Post Service Feedback] 
  where  cast(DATEADD(day,3,[JobCardDate]) as date) between '2015-11-26' and  '2015-12-26' and 
  ([IsCalled] is null or [IsCalled] ='No')  group by cast(DATEADD(day,3,[JobCardDate]) as date)
  ) as s
  PIVOT
(
    SUM([Count])
    FOR CountType IN (TotalCustomer,NotCalled)
) AS pvt

根据 pivot 的语法,我认为我是在正确的轨道上。引用自 this.

这是错误:

Incorrect syntax near 'pvt'.

您有 2 个错误:

  1. FOR CountType IN (TotalCustomer,NotCalled)这个要分隔
  2. 开头额外select * from (

修改后的查询如下:

SELECT  *
FROM    ( SELECT    COUNT(Id) AS [Count] ,
                    'TotalCustomer' AS CountType ,
                    CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE) AS [date]
          FROM      [Honda_db].[dbo].[Post Service Feedback]
          WHERE     CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE) BETWEEN '2015-11-26' AND '2015-12-26'
          GROUP BY  CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE)
          UNION
          SELECT    COUNT(Id) AS [Count] ,
                    'NotCalled' AS CountType ,
                    CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE) AS [Date]
          FROM      [Honda_db].[dbo].[Post Service Feedback]
          WHERE     CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE) BETWEEN '2015-11-26' AND '2015-12-26'
                    AND ( [IsCalled] IS NULL
                          OR [IsCalled] = 'No'
                        )
          GROUP BY  CAST(DATEADD(DAY, 3, [JobCardDate]) AS DATE)
        ) AS s PIVOT
( SUM([Count]) FOR CountType IN ( [TotalCustomer], [NotCalled] ) ) AS pvt