我尝试使用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次Rev ...,
由于
答案 0 :(得分:2)
目前还不清楚列标题的内容,但基本的PIVOT语法如下:
如果您希望将年份作为列标题,则可以使用:
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)