TSQL PIVOT 函数:无效列名错误和创建计算列

TSQL PIVOT Function: Invalid column name error and creating calculated column

我对 PIVOT 功能还很陌生,在过去的一天半里我一直在努力解决这个问题,所以我想我会在潜伏了这么久之后创建一个帐户并问问。

我有一个table,布局如下:

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 列的错误,"Invalid column name 'MntYr'." 我真的不明白为什么会抛出错误。当我在 BaseQuery 拉取中明确命名该列时,尝试拉取该列我做错了什么?

我的第二个问题:

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

我们将不胜感激任何帮助! 谢谢

你的枢轴条款是错误的。您也不需要 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