Tsql 透视表达式中的派生列标题

Tsql 透视表达式中的派生列标题,tsql,pivot,multiple-columns,common-table-expression,calculated-columns,Tsql,Pivot,Multiple Columns,Common Table Expression,Calculated Columns,如上所述,我正在尝试使用CTE执行PIVOT表达式。当我尝试选择我在PIVOT表达式中计算和命名的两列Proposed和Current时,我在SSMS中得到了红线 具体来说,以下几行给了我一个问题: WITH ActiveAccountCodes AS ( SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr FROM @TmpProposedAcc

如上所述,我正在尝试使用CTE执行PIVOT表达式。当我尝试选择我在PIVOT表达式中计算和命名的两列Proposed和Current时,我在SSMS中得到了红线

具体来说,以下几行给了我一个问题:

WITH ActiveAccountCodes AS
(
SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr         FROM @TmpProposedAccountCodes
UNION
SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr  FROM @TmpCurrentAccountCodes
UNION
SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr  FROM @TmpBudget1AccountCodes
UNION
SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr     FROM @TmpBudget2AccountCodes
UNION
SELECT BWfkYear, BWYearID, BWFund, BWMajorObject, BWObject, BWObjectDescr, BWAmount, BWDescr     FROM @TmpBudget3AccountCodes
)
SELECT BWObject, BWObjectDescr, Proposed, Current, Actual1, Actual2, Actual3, BWDescr
FROM ActiveAccountCodes
PIVOT(SUM(BWAmount) FOR BWYearID IN ([SELECT BWYearID FROM @TmpProposedAccountCodes AS [Proposed]],     [SELECT BWYearID FROM @TmpCurrentAccountCodes AS [Current]],
[SELECT BWYearID FROM @TmpBudget1AccountCodes AS Actual1],
[SELECT BWYearID FROM @TmpBudget2AccountCodes AS Actual2],
[SELECT BWYearID FROM @TmpBudget3AccountCodes AS Actual3] )) AS PVT

当我在查询的透视部分定义列名时,我没有得到一个错误,但是当我试图在上面使用列名时,我得到了一个错误。我不知道为什么会这样。谢谢你的帮助。在发布问题之前,我做了一些研究。

不要认为你需要使用CTE来做你正在做的事情,除非你想尝试一下

我相信下面没有CTE的例子就是你要找的。请评论,如果你正在寻找的CTE的例子

SELECT BWObject, BWObjectDescr, Proposed, Current, Actual1, Actual2, Actual3, BWDescr
FROM ActiveAccountCodes
PIVOT(SUM(BWAmount) FOR BWYearID IN ([SELECT BWYearID FROM @TmpProposedAccountCodes AS     [Proposed]], [SELECT BWYearID FROM @TmpCurrentAccountCodes AS [Current]],
[SELECT BWYearID FROM @TmpBudget1AccountCodes AS Actual1],
[SELECT BWYearID FROM @TmpBudget2AccountCodes AS Actual2],
[SELECT BWYearID FROM @TmpBudget3AccountCodes AS Actual3] )) AS PVT

如果您添加了一些示例数据,那就太好了,因为您正在为数据使用表变量
    declare @TmpProposedAccountCodes table (BWfkYear int, BWYearID int, BWFund int, BWObjectDescr varchar(10), BWAmount money, BWDescr  varchar(10))
declare @TmpCurrentAccountCodes table (BWfkYear int, BWYearID int, BWFund int, BWObjectDescr varchar(10), BWAmount money, BWDescr varchar(10))
declare @TmpBudget1AccountCodes table (BWfkYear int, BWYearID int, BWFund int, BWObjectDescr varchar(10), BWAmount money, BWDescr varchar(10))
declare @TmpBudget2AccountCodes table (BWfkYear int, BWYearID int, BWFund int, BWObjectDescr varchar(10), BWAmount money, BWDescr varchar(10))
declare @TmpBudget3AccountCodes table (BWfkYear int, BWYearID int, BWFund int, BWObjectDescr varchar(10), BWAmount money, BWDescr varchar(10))

insert into @TmpProposedAccountCodes
select 0,0,0,'011', 0.1, '0.1'

insert into @TmpBudget1AccountCodes
select 2,2,2,'211', 2.1, '2.1'

insert into @TmpBudget2AccountCodes
select 3,3,3,'311', 3.1, '3.1'

insert into @TmpBudget3AccountCodes
select 4,4,4,'411', 4.1, '4.1'

insert into @TmpCurrentAccountCodes
select 1,1,1,'111', 1.1, '1.1'


select *
from (
    SELECT BWfkYear, 'Proposed' BWYearID, BWFund, BWObjectDescr, BWAmount, BWDescr         FROM @TmpProposedAccountCodes
    UNION
    SELECT BWfkYear, 'Current' BWYearID, BWFund, BWObjectDescr, BWAmount, BWDescr  FROM @TmpCurrentAccountCodes
    UNION
    SELECT BWfkYear, 'Actual1' BWYearID, BWFund, BWObjectDescr, BWAmount, BWDescr  FROM @TmpBudget1AccountCodes
    UNION
    SELECT BWfkYear, 'Actual2' BWYearID, BWFund, BWObjectDescr, BWAmount, BWDescr     FROM @TmpBudget2AccountCodes
    UNION
    SELECT BWfkYear, 'Actual3' BWYearID, BWFund, BWObjectDescr, BWAmount, BWDescr     FROM @TmpBudget3AccountCodes
) x
PIVOT(SUM(BWAmount) FOR BWYearID IN (
[Proposed],
[Current],
[Actual1],
[Actual2],
[Actual3] )) AS PVT