TSQL - 似乎无法从 CTE 透视输出(无效的对象名称错误)



以下是我执行 SELECT * FROM 时 CTE 的输出CTE_RESULTS

期末余额
A 38909554.57
B -30068540.13
C 731413.26
D 182167
E -53016969.08
传真 24768896.85

然后,我编写一个透视来更改其显示方式,以便我可以执行进一步的查询,对每个"描述"的关联值执行计算

例如:我想计算

A*B*C/F(为简单起见,我们称之为"利润"的虚构计算)
C+D*E(为简单起见,我们称之为"利润率"的虚构计算)

并将这些结果显示在另一个表中,例如:

计算结果
利润65466787878(随机数代表 A*B*C/F 的值)
利润率345678864(随机数表示 C+D*E 的值)

这就是我要去的地方。

我现在的问题是创建枢轴。查询选择 * FROM CTE_RESULTS有效,因此我的 CTE 没有问题。

但是,当我执行透视时:

选择[描述],[A]作为"A",[B]作为"B",[C]作为"C",[D]作为"D",[E]

作为"E",[F]选择"F"

(从CTE_RESULTS中选择[描述]、[期末余额]) 作为 SRC
枢轴([期末余额])为"A"、"B"、"C"、"D"、"E"、"F")中的[描述]作为PVT;

我收到一个错误:

无效的对象名称"CTE_RESULTS"

有什么想法吗??

我可以看到您的查询有两个问题,但都不会导致错误Invalid object name 'CTE_RESULTS'.

首先,您在 CTE 中使用单引号来引用列名称,这仅适用于别名。您需要使用方括号:

FOR [Description] IN ([A],[B],[C],[D],[E],[F])

其次,您引用了选择列表中的列[Description],但这被透视删除(因为它正在成为列),因此您将收到无效的列名错误。

最终查询应如下所示:

WITH CTE_RESULTS AS
(   SELECT  *
    FROM    T
)
SELECT  [A] AS 'A', [B] AS 'B', [C] AS 'C', [D] AS 'D', [E] AS 'E', [F] AS 'F'
FROM    (   SELECT [Description], [CLOSING BALANCE] 
            FROM    CTE_RESULTS
        )  AS SRC
        PIVOT 
        (   MAX([CLOSING BALANCE]) 
            FOR [Description] IN ([A],[B],[C],[D],[E],[F])
        ) AS PVT;

这给了:

   A     |     B     |   C    |   D    |    E      |    F
---------+-----------+--------+--------+-----------+----------
38909554 | -30068540 | 731413 | 182167 | -53016969 | 24768896

SQL小提琴的工作示例

最新更新