在视图中使用创建的列

时间:2018-07-20 23:52:38

标签: mysql sql

我已将这种情况简化到最小的情况,因此“为什么”之类的细节可能已经消失了;-) 我有一个包含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

2 个答案:

答案 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