我已将这种情况简化到最小的情况,因此“为什么”之类的细节可能已经消失了;-) 我有一个包含2列的数据库表:
malloc
我想创建一个视图,在其中添加一个{total“,其中NULL
例如
A varchar(1) | B (integer)
但是我想知道我是否也使用了10还是5,所以我想要这样的“ B值”列:
if A = 1 then total = B * 10 else total = B * 5
所以我试图创建一个视图:
A B Total
-----------
1 1 10
1 2 20
2 1 5
2 2 10
但是我得到一个错误:A B BVal Total
----------------
1 1 10 10
1 2 10 20
2 1 5 5
2 2 5 10
。无论如何,可以在单个视图中完成这项工作吗?
对于任何想要足够信息进行DIY的人:
select A, B, (case A when 1 then 10 else 5 end) as Bval, B * Bval as Total from dummy
答案 0 :(得分:2)
您不能在同一select子句中重复使用别名,因此必须重复CASE
表达式:
SELECT
A,
B,
(CASE A WHEN 1 THEN 10 ELSE 5 END) AS Bval,
B * (CASE A WHEN 1 THEN 10 ELSE 5 END) AS Total
FROM dummy;
关于为什么是这种情况,在评估select子句时别名不可用。
请注意,您可以将当前查询包装在子查询中,以使用B
别名。但是,不要这样做,因为它可能会影响性能。
答案 1 :(得分:0)
由于BVal是计算字段,因此您需要使用以下内部查询
select
A,
B,
BVal,
BVal * B as Total
from
(
select
A,
B,
(case A when 1 then 10 else 5 end) as Bval
from dummy) innerQuery