我有一个带有某个名为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
但它没有用,有人有想法吗?
答案 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返回多个值,例如:使用对象类型,但这是针对不同问题的东西: - )