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
我对 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