如何在sql查询中实现if..then条件

如何在sql查询中实现if..then条件,sql,oracle,plsql,Sql,Oracle,Plsql,我的plsql代码中有一个逻辑,它使用IF-THEN-ELSE逻辑。我想将逻辑移到sql。如何将IF-THEN-ELSE的逻辑转换为SQL plsql逻辑 IF sns.quantity >= 0 /*stage_na_shipment sns*/ THEN l_code := 'O';/*l_code is local variable*/ ELSE l_code := 'C'; END IF; SELECT bt_id INTO l_bt_bt_id FROM bil

我的plsql代码中有一个逻辑,它使用IF-THEN-ELSE逻辑。我想将逻辑移到sql。如何将IF-THEN-ELSE的逻辑转换为SQL

plsql逻辑

IF sns.quantity >= 0 /*stage_na_shipment sns*/
THEN
   l_code := 'O';/*l_code is local variable*/
ELSE
   l_code := 'C';
END IF;

SELECT bt_id  INTO l_bt_bt_id  FROM bill_type
WHERE code = l_code
AND ds_ds_id = 1;
如何使用sql执行上述逻辑,我需要将bt.id附加到此查询中

SELECT sns.order_num_cos, 
  1, 
  sns.ship_date, 
  sns.haulier_name, 
  sns.haulier_num, 
  sns.ship_date, 
  sns.order_num_cos, 
  sf.sf_id, 
  c.cust_id, 
  2, 
  1,
  m.mkt_id, 
  0, 
  sns.ship_date, 
  sns.po_number, 
  sns.ship_date, 
  bt.bt_id, 
  sns.ship_date, 
  sns.stor_loc
FROM stage_na_shipment sns, 
  market m,
  ship_from sf,
  customer c,
  bill_type bt
WHERE m.code = DECODE(SUBSTR(TO_CHAR(sns.client), 1, 4), 'US23', 'MM', 'US99', 'AFFCO') 
AND sf.source_key = sns.ship_from
AND c.true_gcdb_source_key = TO_CHAR(sns.del_point);

基本上,您可以使用select case语句执行此操作,如下所示:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
或通过解码:

SELECT DECODE(sign(sns.quantity),-1,'C','O') 
FROM sns

这意味着如果符号(sns.quantity)等于-1,解码函数返回'C',否则返回'O'。

基本上,您可以使用select case语句执行此操作,如下所示:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
或通过解码:

SELECT DECODE(sign(sns.quantity),-1,'C','O') 
FROM sns

这意味着如果符号(sns.quantity)等于-1,解码函数返回'C',否则返回'O'。

基本上,您可以使用select case语句执行此操作,如下所示:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
或通过解码:

SELECT DECODE(sign(sns.quantity),-1,'C','O') 
FROM sns

这意味着如果符号(sns.quantity)等于-1,解码函数返回'C',否则返回'O'。

基本上,您可以使用select case语句执行此操作,如下所示:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
或通过解码:

SELECT DECODE(sign(sns.quantity),-1,'C','O') 
FROM sns

这意味着如果符号(sns.quantity)等于-1,解码函数返回“C”,否则返回“O”。

您可以创建如下语法:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
当sns.quantity>=0时选择大小写,然后选择“0”
当sns.quantity<0时,则“C”作为表\u name\u中的lcode结束
由于您的表包含来自另一个表的id,因此您可能必须使用
连接


您可以创建如下语法:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
当sns.quantity>=0时选择大小写,然后选择“0”
当sns.quantity<0时,则“C”作为表\u name\u中的lcode结束
由于您的表包含来自另一个表的id,因此您可能必须使用
连接


您可以创建如下语法:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
当sns.quantity>=0时选择大小写,然后选择“0”
当sns.quantity<0时,则“C”作为表\u name\u中的lcode结束
由于您的表包含来自另一个表的id,因此您可能必须使用
连接


您可以创建如下语法:

SELECT CASE 
        WHEN sns.quantity >= 0 then 'O'
        ELSE 'C'
       END l_code
FROM sns
Select case when sns.quantity >= 0 then '0'
when sns.quantity < 0 then 'C' end as lcode from table_name_here
当sns.quantity>=0时选择大小写,然后选择“0”
当sns.quantity<0时,则“C”作为表\u name\u中的lcode结束
由于您的表包含来自另一个表的id,因此您可能必须使用
连接


加入
bill\u type
表,就像这样

JOIN bill_type bt ON bt.code = CASE WHEN sns.quantity >= 0 THEN 'O' ELSE 'C' END
                 AND bt.ds_ds_id = 1
现在,ANSI连接语法通常是首选的


请参见并。

加入
票据类型表,如下所示

JOIN bill_type bt ON bt.code = CASE WHEN sns.quantity >= 0 THEN 'O' ELSE 'C' END
                 AND bt.ds_ds_id = 1
现在,ANSI连接语法通常是首选的


请参见并。

加入
票据类型表,如下所示

JOIN bill_type bt ON bt.code = CASE WHEN sns.quantity >= 0 THEN 'O' ELSE 'C' END
                 AND bt.ds_ds_id = 1
现在,ANSI连接语法通常是首选的


请参见并。

加入
票据类型表,如下所示

JOIN bill_type bt ON bt.code = CASE WHEN sns.quantity >= 0 THEN 'O' ELSE 'C' END
                 AND bt.ds_ds_id = 1
现在,ANSI连接语法通常是首选的

见和

您可以用上述代码替换sql代码中的“bt.bt_id”

您可以用上述代码替换sql代码中的“bt.bt_id”

您可以用上述代码替换sql代码中的“bt.bt_id”

您可以用上述代码替换sql代码中的“bt.bt_id”。

用例1,否则0结束。尝试用谷歌搜索iTunes案例,然后1或0结束。尝试用谷歌搜索iTunes案例,然后1或0结束。尝试用谷歌搜索iTunes案例,然后1或0结束。试试谷歌吧