Using IF ELSE in Oracle

前端 未结 2 1250
一个人的身影
一个人的身影 2020-12-10 05:10

As a web developer, I know how to use the IF ELSE in multiple languages. However, I am learning how to write reports using TOAD for Oracle.

My question is, how do I

相关标签:
2条回答
  • 2020-12-10 05:55

    You can use Decode as well:

    SELECT DISTINCT a.item, decode(b.salesman,'VIKKIE','ICKY',Else),NVL(a.manufacturer,'Not Set')Manufacturer
    FROM inv_items a, arv_sales b
    WHERE a.co = b.co
          AND A.ITEM_KEY = b.item_key
          AND a.co = '100'
    AND a.item LIKE 'BX%'
    AND b.salesman in ('01','15')
    AND trans_date BETWEEN to_date('010113','mmddrr')
                             and to_date('011713','mmddrr')
    GROUP BY a.item, b.salesman, a.manufacturer
    ORDER BY a.item
    
    0 讨论(0)
  • 2020-12-10 06:10

    IF is a PL/SQL construct. If you are executing a query, you are using SQL not PL/SQL.

    In SQL, you can use a CASE statement in the query itself

    SELECT DISTINCT a.item, 
                    (CASE WHEN b.salesman = 'VIKKIE'
                          THEN 'ICKY'
                          ELSE b.salesman
                      END), 
                    NVL(a.manufacturer,'Not Set') Manufacturer
      FROM inv_items a, 
           arv_sales b
     WHERE  a.co = '100'
       AND a.co = b.co
       AND A.ITEM_KEY = b.item_key   
       AND a.item LIKE 'BX%'
       AND b.salesman in ('01','15')
       AND trans_date BETWEEN to_date('010113','mmddrr')
                          and to_date('011713','mmddrr')
    ORDER BY a.item
    

    Since you aren't doing any aggregation, you don't want a GROUP BY in your query. Are you really sure that you need the DISTINCT? People often throw that in haphazardly or add it when they are missing a join condition rather than considering whether it is really necessary to do the extra work to identify and remove duplicates.

    0 讨论(0)
提交回复
热议问题