1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

DECODE or CASE or something else?

Discussion in 'SQL PL/SQL' started by LindaM, Mar 13, 2013.

  1. LindaM

    LindaM Active Member

    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    55
    Can DECODE or CASE check two conditions or expressions at the same time? In other words, I want to check if (level is 'CP' AND subject is 'MATH'), then return 'Y', otherwise return 'N'. I have a DECODE statement now that checks if level is 'CP', but I need to add in the subject also. Can I do this with DECODE or CASE or should I be looking at something else?
    Thanks for any suggestions.
     
  2. zargon

    zargon Community Moderator Forum Guru

    Messages:
    2,347
    Likes Received:
    348
    Trophy Points:
    1,430
    Location:
    Aurora, CO
    Case can do exactly what you want:

    Code (SQL):
    SQL> CREATE TABLE stud_course(
      2          stud_id NUMBER,
      3          subject varchar2(20),
      4          lvl     varchar2(4),
      5          instructor varchar2(40)
      6  );
     
    TABLE created.
     
    SQL>
    SQL> BEGIN
      2          FOR i IN 1..100 loop
      3                  IF MOD(i, 17) = 0 THEN
      4                          INSERT INTO stud_course
      5                          VALUES(i, 'Math', 'CP', 'Fnarm');
      6                  elsif MOD(i, 33) = 0 THEN
      7                          INSERT INTO stud_course
      8                          VALUES(i, 'Math', 'XP', 'Fnorm');
      9                  elsif MOD(i, 77) = 0 THEN
     10                          INSERT INTO stud_course
     11                          VALUES(i, 'English', 'CP', 'Fnurm');
     12                  ELSE
     13                          INSERT INTO stud_course
     14                          VALUES(i, 'Chemistry','CP','Yomper');
     15                  END IF;
     16
     17          END loop;
     18
     19          commit;
     20
     21  END;
     22  /
     
    PL/SQL PROCEDURE successfully completed.
     
    SQL>
    SQL> SELECT stud_id,
      2         lvl, subject,
      3          CASE WHEN lvl = 'CP' AND subject = 'Math' THEN 'Y' ELSE 'N' END MathCk,
      4          instructor
      5  FROM stud_course
      6  ORDER BY 4;
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
             1 CP   Chemistry            N Yomper
             2 CP   Chemistry            N Yomper
             3 CP   Chemistry            N Yomper
             4 CP   Chemistry            N Yomper
             5 CP   Chemistry            N Yomper
             6 CP   Chemistry            N Yomper
             7 CP   Chemistry            N Yomper
             8 CP   Chemistry            N Yomper
             9 CP   Chemistry            N Yomper
            10 CP   Chemistry            N Yomper
            11 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            12 CP   Chemistry            N Yomper
            13 CP   Chemistry            N Yomper
            14 CP   Chemistry            N Yomper
            15 CP   Chemistry            N Yomper
            16 CP   Chemistry            N Yomper
            18 CP   Chemistry            N Yomper
            19 CP   Chemistry            N Yomper
            20 CP   Chemistry            N Yomper
            21 CP   Chemistry            N Yomper
            22 CP   Chemistry            N Yomper
            23 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            24 CP   Chemistry            N Yomper
            25 CP   Chemistry            N Yomper
            26 CP   Chemistry            N Yomper
            27 CP   Chemistry            N Yomper
            28 CP   Chemistry            N Yomper
            29 CP   Chemistry            N Yomper
            30 CP   Chemistry            N Yomper
            31 CP   Chemistry            N Yomper
            32 CP   Chemistry            N Yomper
            33 XP   Math                 N Fnorm
            35 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            36 CP   Chemistry            N Yomper
            37 CP   Chemistry            N Yomper
            38 CP   Chemistry            N Yomper
            39 CP   Chemistry            N Yomper
            40 CP   Chemistry            N Yomper
            41 CP   Chemistry            N Yomper
            42 CP   Chemistry            N Yomper
            43 CP   Chemistry            N Yomper
            44 CP   Chemistry            N Yomper
            45 CP   Chemistry            N Yomper
            46 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            47 CP   Chemistry            N Yomper
            48 CP   Chemistry            N Yomper
            49 CP   Chemistry            N Yomper
            50 CP   Chemistry            N Yomper
            52 CP   Chemistry            N Yomper
            53 CP   Chemistry            N Yomper
            54 CP   Chemistry            N Yomper
            55 CP   Chemistry            N Yomper
            56 CP   Chemistry            N Yomper
            57 CP   Chemistry            N Yomper
            58 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            59 CP   Chemistry            N Yomper
            60 CP   Chemistry            N Yomper
            61 CP   Chemistry            N Yomper
            62 CP   Chemistry            N Yomper
            63 CP   Chemistry            N Yomper
            64 CP   Chemistry            N Yomper
            65 CP   Chemistry            N Yomper
            66 XP   Math                 N Fnorm
            67 CP   Chemistry            N Yomper
            69 CP   Chemistry            N Yomper
            70 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            71 CP   Chemistry            N Yomper
            72 CP   Chemistry            N Yomper
            73 CP   Chemistry            N Yomper
            74 CP   Chemistry            N Yomper
            75 CP   Chemistry            N Yomper
            76 CP   Chemistry            N Yomper
            77 CP   English              N Fnurm
            78 CP   Chemistry            N Yomper
            79 CP   Chemistry            N Yomper
            80 CP   Chemistry            N Yomper
            81 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            82 CP   Chemistry            N Yomper
            83 CP   Chemistry            N Yomper
            84 CP   Chemistry            N Yomper
            86 CP   Chemistry            N Yomper
            87 CP   Chemistry            N Yomper
            88 CP   Chemistry            N Yomper
            89 CP   Chemistry            N Yomper
            90 CP   Chemistry            N Yomper
            91 CP   Chemistry            N Yomper
            92 CP   Chemistry            N Yomper
            93 CP   Chemistry            N Yomper
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            94 CP   Chemistry            N Yomper
            95 CP   Chemistry            N Yomper
            96 CP   Chemistry            N Yomper
            97 CP   Chemistry            N Yomper
            98 CP   Chemistry            N Yomper
            99 XP   Math                 N Fnorm
           100 CP   Chemistry            N Yomper
            17 CP   Math                 Y Fnarm
            34 CP   Math                 Y Fnarm
            85 CP   Math                 Y Fnarm
            68 CP   Math                 Y Fnarm
     
       STUD_ID LVL  SUBJECT              M INSTRUCTOR
    ---------- ---- -------------------- - ----------------------------------------
            51 CP   Math                 Y Fnarm
     
    100 ROWS selected.
     
    SQL>
     
     
  3. LindaM

    LindaM Active Member

    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    55
    Thank you! I'm still double checking the results, but that appears to work. Thanks again.
     
  4. rajavu

    rajavu Forum Guru

    Messages:
    815
    Likes Received:
    52
    Trophy Points:
    610
    Location:
    @ Bangalore , India
    The Decode also works fro the same situation.
    Try with

    Code (SQL):

    WITH rec AS (
    SELECT  94 no,'CP' lvl,'Chemistry' subject FROM dual UNION
    SELECT  95,'CP','Chemistry' FROM dual UNION
    SELECT  96,'CP','Chemistry' FROM dual UNION
    SELECT  97,'CP','Chemistry' FROM dual UNION
    SELECT  98,'CP','Chemistry'  FROM dual UNION
    SELECT  99,'XP','Math'     FROM dual UNION
    SELECT  100,'CP','Chemistry'  FROM dual UNION
    SELECT  17,'CP','Math'  FROM dual UNION
    SELECT  34,'CP','Math'  FROM dual UNION
    SELECT  85,'CP','Math'  FROM dual UNION
    SELECT  68,'CP','Math'  FROM dual )
    SELECT rec.* , DECODE(lvl, 'CP',DECODE(subject ,'Math','Y','N'),'N')  AS MathCk
    FROM rec