添加两个计算列以使用“WHERE”子句进行查看

时间:2015-05-13 02:54:28

标签: mysql

我正在使用它创建一个视图,其中包含表中的所有列以及一个新列,其中的值基于另外两列的计算。我有这个工作正常添加一列:

CREATE VIEW `calculated_full` AS
SELECT *, 
`planned`-`actual_widget` AS `widget_delta` FROM `joined_table` where product = "widgets"

基本上,这就是说在这两列之间执行此计算,但仅当第三列(product)具有特定值时才执行此计算。这很好。

但是,我需要这样做以向视图添加另一个计算列,只有在第三列(product)具有不同值时才应执行该列。像这样(当然这不起作用)。

CREATE VIEW `calculated_full` AS
SELECT *, 
`planned`-`actual_widget` AS `widget_delta` FROM `joined_table` where product = "widgets", 
`planned`-`actual_knob` AS `knobs_delta` FROM `joined_table` where product = "knobs"

1 个答案:

答案 0 :(得分:1)

我认为你希望计算由行执行,并且所有值都在同一个表中,如果是这样,你可以使用if语句的等价物CASE语句有选择地执行计算

如果未找到案例,则返回null。

select *,
case when product = "widgets" then `planned`-`actual_widget` end  as widget_delta,
case when product = "knobs" then `planned`-`actual_knobs` end as knobs_delta
from joined-table

如果您不希望它返回null,只需添加ELSE子句:

case when condition then value_if_true else value_if_false end

CASE语句也可以这样写:

case product when "widget" then widgetvalue end

或者如果您需要多个案例:

case product
     when "widget" then widgetvalue
     when "knob" then knobvalue
     else defaultvalue
end