0

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

说明期末余额
A 38909554.57
B -30068540.13
C 731413.26
D 182167
E -53016969.08
F 24768896.85

然后我编写一个数据透视表来改变它的显示方式,这样我就可以做进一步的查询,对每个“描述”的相关值进行计算

例如:我要计算

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

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

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

这就是我要去的地方。

我现在的问题是创建支点。查询 SELECT * FROM CTE_RESULTS 有效,所以这不是我的 CTE 的问题。

但是,当我做一个支点时:

选择 [描述],[A] 作为'A',[B] 作为'B',[C] 作为'C',[D] 作为'D',[E] 作为'E',[F] 作为' F'
FROM
(SELECT [Description], [CLOSING BALANCE] FROM CTE_RESULTS) 作为 SRC
PIVOT (MAX([CLOSING BALANCE]) FOR [Description] IN 'A','B','C','D','E ','F')) 作为 PVT;

我收到一个错误:

无效的对象名称“CTE_RESULTS”

有什么想法吗??

4

1 回答 1

1

我可以看到您的查询有两个问题,但都不会导致错误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 Fiddle 上的工作示例

于 2013-10-25T10:00:03.853 回答