我正在尝试执行嵌套的 case 语句,当初始 case 语句中的条件未执行时,这些语句将被执行。我收到错误“无效的列名-initial_case_output”。任何建议将不胜感激。
SELECT
ZTYPE_TRF,
CASE WHEN type = '4' THEN N'ABC'
WHEN type = '3' THEN N'DEF'
END AS initial_case_output,
(CASE
WHEN b.SC = 'D2' then N'DEF'
WHEN b.SC = 'D5' then N'GHI'
ELSE initial_case_output
END) AS ZTYPE_NEW
FROM report a left join table2 b
on a.BA = b.BA;
如果您将计算包装在
CROSS APPLY
中,则可以在查询中的其他位置引用结果。
SELECT
ZTYPE_TRF,
CA.initial_case_output,
(CASE
WHEN b.SC = 'D2' then N'DEF'
WHEN b.SC = 'D5' then N'GHI'
ELSE CA.initial_case_output
END) AS ZTYPE_NEW
FROM report a
LEFT JOIN table2 b ON a.BA = b.BA
CROSS APPLY (
SELECT
CASE
WHEN type = '4' THEN N'ABC'
WHEN type = '3' THEN N'DEF'
END AS initial_case_output
) CA;
甚至:
SELECT
ZTYPE_TRF,
CA1.initial_case_output,
CA2.ZTYPE_NEW
FROM report a
LEFT JOIN table2 b ON a.BA = b.BA
CROSS APPLY (
SELECT
CASE
WHEN type = '4' THEN N'ABC'
WHEN type = '3' THEN N'DEF'
END AS initial_case_output
) CA1
CROSS APPLY (
SELECT
CASE
WHEN b.SC = 'D2' then N'DEF'
WHEN b.SC = 'D5' then N'GHI'
ELSE CA1.initial_case_output
END AS ZTYPE_NEW
) CA2;
该错误是因为 CASE 语句试图在定义之前访问
initial_case_output
。您需要将查询分解为子查询才能访问别名。
SELECT 子句中定义的别名在同一 SELECT 子句中不可用。
这里有一个更好的方法来解决这个问题:
SELECT
a.ZTYPE_TRF,
initial_case_output,
(CASE
WHEN b.SC = 'D2' THEN N'DEF'
WHEN b.SC = 'D5' THEN N'GHI'
ELSE initial_case_output
END) AS ZTYPE_NEW
FROM
(
SELECT
ZTYPE_TRF,
CASE
WHEN type = '4' THEN N'ABC'
WHEN type = '3' THEN N'DEF'
END AS initial_case_output
FROM
report
) a
LEFT JOIN table2 b ON a.BA = b.BA;
PS。我不知道您正在使用的确切变量和表格,但这是解决问题的总体思路。