TSQL PIVOT功能:列名称错误无效并创建计算列

时间:2015-04-16 16:01:54

标签: tsql pivot calculated-columns

我对PIVOT功能很陌生,过去一天半我一直试图解决这个问题,所以我想我会在潜伏了这么长时间之后创建一个帐户并且只是问一下。

我的表格布局如下:

AsOfDt      AcctNum MntYr   Dt          Category                Count
4/15/2015   12345   Jan-15  1/18/2015   Registered User         1
4/15/2015   12346   Feb-15  2/7/2015    New Registration User   1
4/15/2015   12347   Jan-15  1/27/2015   Unique Account          1
4/15/2015   12348   Jan-15  1/24/2015   Registered User         1

这是我想要实现的最终结果

MntYr        Account Population New Registration User   Registered User Unique Account
Jan 2015     330984             12                      26212           26311
Feb 2015     331897             2953                    58702           58894
Mar 2015     343561             950                     29498           29638
Apr 2015     343181             675                     8845            8916
Grand Total  1349623            4590                    123257          123759

以下是我目前构建的查询:

WITH BaseQuery AS (
                SELECT 
                    MntYr
                    ,Category
                    ,[Count]
                FROM [dbo].[rpt_gen_WebPortal_TestingData]
              )

SELECT       [MntYr]
        ,'Account Population'
        ,'Unique Account'
        ,'Registered User'
        ,'New Registration User' 

FROM BaseQuery


pivot (sum([count]) for MntYr  
    in ("Jan 2015", "Feb 2015", "Mar 2015", "Apr 2015" )
    ) AS Pivoting

我的第一个问题:

我在第二个SELECT语句中为我的MntYr列收到错误,"无效的列名称' MntYr'。"我真的不明白为什么这会引发错误。当我在BaseQuery pull中明确命名时,尝试拉出该列时,我做错了什么?

我的第二个问题:

我还想根据(唯一帐户/帐户人口)的百分比创建计算字段,但我不太确定如何在PIVOT函数中计算字段。关于如何开始使用这个的想法?

非常感谢任何和所有帮助! 感谢。

1 个答案:

答案 0 :(得分:0)

你的枢轴条款错了。您也不需要CTE。试试这个:

SELECT 
    MntYr
    ,[Account Population]
    ,[Unique Account]
    ,[Registered User]
    ,[New Registration User]
    ,case 
        when isnull([Account Population],0) = 0 then 0 
        else 100 * [Unique Account] / [Account Population]
    end Pct
FROM (
    SELECT 
        MntYr
        ,Category
        ,[Count]
    FROM [dbo].[rpt_gen_WebPortal_TestingData]
) BaseQuery
pivot (sum([Count]) for Category
    in ([Account Population]
        ,[Unique Account]
        ,[Registered User]
        ,[New Registration User] )
    ) AS Pivoting