我正在使用它创建一个视图,其中包含表中的所有列以及一个新列,其中的值基于另外两列的计算。我有这个工作正常添加一列:
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"
答案 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