首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PIVOT命令

使用PIVOT命令
EN

Stack Overflow用户
提问于 2013-09-06 11:11:18
回答 1查看 303关注 0票数 1

我试着使用PIVOT TSQL命令,但是我被卡住了。

我尝试使用一些我也可以使用聚合函数解决的极简示例(所以请不要回答有关使用COUNT的问题),只是为了理解。

这是一个例子:

代码语言:javascript
复制
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次审查,.

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 11:17:21

对于列标题还不太清楚,但是基本的枢轴语法如下所示。

如果希望年份成为列标题,则可以使用:

代码语言:javascript
复制
select EventType, [2013], [2012]
from
(
    select EventType, 
        date = year(date)
    from dbo.testTable
) d
pivot
(
    count(date)
    for date in ([2013], [2012])
) piv;

如果您希望EventTypes成为列标题:

代码语言:javascript
复制
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获得结果:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18656411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档