使用联合在 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 个错误:
FOR CountType IN (TotalCustomer,NotCalled)
这个要分隔
- 开头额外
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
这个查询有什么问题:
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 个错误:
FOR CountType IN (TotalCustomer,NotCalled)
这个要分隔- 开头额外
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