以下是我执行 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小提琴的工作示例