我对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函数中计算字段。关于如何开始使用这个的想法?
非常感谢任何和所有帮助! 感谢。
答案 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