多个字段之间的条件选择

时间:2014-06-11 09:07:13

标签: sql oracle conditional

我有一个带有某个名为FL_virtual的标志的表,如果此标志等于1,我需要使用函数以特殊方式获取我的库存

现在我想用它做一个select语句但是根据这个标志我需要调整我的select以使用某个函数而不是子查询

所以假设我从这个选择语句开始

select product_name,..(other options from the product table), (select sum(qy_stock) from STOCK where warehouse_id = 1) as 'qy_stock_internal', (select sum(qy_stock) from STOCK where warehouse_id = 2) as qy_stock_external From product

现在我需要在fl_virtual标志为1时调用函数来更改子查询(qy_stock)

这样就变成了这个

select product_name,..(other options from the product table), FN_GET_stock_PRODUCT(1) as qy_stock_internal, FN_GET_stock_PRODUCT(2) as qy_stock_external from product

所以我认为一个简单的if then else结构会做但由于某种原因我不能让它工作 这就是我认为的样子

select product_name,..(other options from the product table),
 IF fl_virtual > 0 THEN 
(select sum(qy_stock) from STOCK where warehouse_id = 1) as 'qy_stock_internal',
(select sum(qy_stock) from STOCK where warehouse_id = 2) as qy_stock_external

ELSE  

FN_GET_stock_PRODUCT(1) as qy_stock_internal,
FN_GET_stock_PRODUCT(2) as qy_stock_external
END IF

但它没有用,有人有想法吗?

2 个答案:

答案 0 :(得分:0)

最好的方法是使用带有这2个不同查询和对象的联合选择。

顺便说一下。名称库存和仓库看起来像典型的学校工作考试。

答案 1 :(得分:0)

您已关闭 - 只需使用CASE代替IF(您必须重复您的条件,因为您无法轻松地从单个CASE返回两列(请参阅PS):

select product_name,
       ..(other options from the product table),
       (CASE
         WHEN fl_virtual > 0 THEN
          (select sum(qy_stock) from STOCK where warehouse_id = 1)
         ELSE
          FN_GET_stock_PRODUCT(1)
       END) as qy_stock_internal,
       (CASE
         WHEN fl_virtual > 0 THEN
          (select sum(qy_stock) from STOCK where warehouse_id = 2)
         ELSE
          FN_GET_stock_PRODUCT(2)
       END) as qy_stock_external 

P.S。: 可以从单个CASE返回多个值,例如:使用对象类型,但这是针对不同问题的东西: - )