我试着使用PIVOT TSQL命令,但是我被卡住了。
我尝试使用一些我也可以使用聚合函数解决的极简示例(所以请不要回答有关使用COUNT的问题),只是为了理解。
这是一个例子:
CREATE TABLE [dbo].[TestTable](
[EventType] [varchar](50) NULL,
[Date] [datetime] NULL
)
GO
insert into TestTable values ('Meeting', '2013-01-01')
insert into TestTable values ('Meeting', '2012-02-02')
insert into TestTable values ('Review', '2013-01-01')
insert into TestTable values ('Review', '2012-01-01')
insert into TestTable values ('Other', '2012-05-05')您能告诉我使用PIVOT的查询是为了获得每年和每种类型的结果吗?我预计:2013年1次会议,2012年1次会议,2013年1次审查,.
谢谢
发布于 2013-09-06 11:17:21
对于列标题还不太清楚,但是基本的枢轴语法如下所示。
如果希望年份成为列标题,则可以使用:
select EventType, [2013], [2012]
from
(
select EventType,
date = year(date)
from dbo.testTable
) d
pivot
(
count(date)
for date in ([2013], [2012])
) piv;如果您希望EventTypes成为列标题:
select year, Meeting, Review, Other
from
(
select EventType,
year = year(date)
from dbo.testTable
) d
pivot
(
count(EventType)
for EventType in (Meeting, Review, Other)
) piv;如果有未知数量的值,则可以使用动态SQL获得结果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(EventType)
from dbo.testTable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT year,' + @cols + '
from
(
select EventType,
year = year(date)
from dbo.testTable
) x
pivot
(
count(EventType)
for EventType in (' + @cols + ')
) p '
execute(@query)https://stackoverflow.com/questions/18656411
复制相似问题