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!

Sql replace case when sorting

Discussion in 'SQL PL/SQL' started by soushi01, Nov 18, 2013.

  1. soushi01

    soushi01 Active Member

    Messages:
    5
    Likes Received:
    0
    Trophy Points:
    55
    Hi, Im newbie sql

    I have record which list at below

    select product, monthyear from calendar

    product -- monthyear
    -----------------------------------
    Nike ------- 122008
    Adidas ----- 122008
    Puma ----- 122008
    Reebok ----- 042009
    Newbalance -- 042009
    OEM -------- 082009
    Armani -------- 082009


    I need to display record like this, but i don't wan using case when statement :( ....

    product -- monthyear ----- no
    --------------------------------------
    Nike ------- 122008 ---- 1
    Adidas ----- 122008 ---- 1
    Puma ----- 122008 ---- 1
    Reebok ----- 042009 ---- 2
    Newbalance -- 042009 ---- 2
    OEM -------- 082009 ---- 3
    Armani -------- 082009 ---- 3

    any solution ?

    thanks
     
  2. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi,
    What do you want exactly? your question is not clear.
     
    soushi01 likes this.
  3. dariyoosh

    dariyoosh Forum Advisor

    Messages:
    118
    Likes Received:
    19
    Trophy Points:
    260
    Hi,

    If the ranking is to be done based on the monthyear column (the second column indicated in your sample output), then you can use dense_rank analytic function.

    Here is an example, using the employees table provided by oracle in hr sample schema (11gR2), which prints some employee information based on the ranking on their salary, the employees earning the same amount will have the same ranking value and at the end the result is sorted respectively based on the rank and their salary (In this example the ranking is done in descending order, that is, from the highest salary to the lowest, it's just an example).
    Code (SQL):
    SELECT  t1.department_id,
            t1.employee_id,
            t1.first_name,
            t1.salary,
            dense_rank() OVER (ORDER BY t1.salary DESC) salary_rank
    FROM    hr.employees t1
    ORDER BY salary_rank ASC, t1.salary DESC;
    And the output is
    Code (Text):

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               90         100 Steven                    24000           1
               90         101 Neena                     17000           2
               90         102 Lex                       17000           2
               80         145 John                      14000           3
               80         146 Karen                     13500           4
               20         201 Michael                   13000           5
              110         205 Shelley                   12008           6
              100         108 Nancy                     12008           6
               80         147 Alberto                   12000           7
               80         168 Lisa                      11500           8
               80         148 Gerald                    11000           9

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               80         174 Ellen                     11000           9
               30         114 Den                       11000           9
               80         162 Clara                     10500          10
               80         149 Eleni                     10500          10
               80         169 Harrison                  10000          11
               80         156 Janette                   10000          11
               80         150 Peter                     10000          11
               70         204 Hermann                   10000          11
               80         170 Tayler                     9600          12
               80         151 David                      9500          13
               80         157 Patrick                    9500          13

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               80         163 Danielle                   9500          13
               60         103 Alexander                  9000          14
              100         109 Daniel                     9000          14
               80         152 Peter                      9000          14
               80         158 Allan                      9000          14
               80         175 Alyssa                     8800          15
               80         176 Jonathon                   8600          16
               80         177 Jack                       8400          17
              110         206 William                    8300          18
              100         110 John                       8200          19
               50         121 Adam                       8200          19

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               50         120 Matthew                    8000          20
               80         153 Christopher                8000          20
               80         159 Lindsey                    8000          20
               50         122 Payam                      7900          21
              100         112 Jose Manuel                7800          22
              100         111 Ismael                     7700          23
               80         160 Louise                     7500          24
               80         154 Nanette                    7500          24
               80         171 William                    7400          25
               80         172 Elizabeth                  7300          26
               80         164 Mattea                     7200          27

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               80         155 Oliver                     7000          28
               80         161 Sarath                     7000          28
                          178 Kimberely                  7000          28
              100         113 Luis                       6900          29
               80         165 David                      6800          30
               50         123 Shanta                     6500          31
               40         203 Susan                      6500          31
               80         166 Sundar                     6400          32
               80         167 Amit                       6200          33
               80         179 Charles                    6200          33
               80         173 Sundita                    6100          34

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               20         202 Pat                        6000          35
               60         104 Bruce                      6000          35
               50         124 Kevin                      5800          36
               60         106 Valli                      4800          37
               60         105 David                      4800          37
               10         200 Jennifer                   4400          38
               60         107 Diana                      4200          39
               50         184 Nandita                    4200          39
               50         185 Alexis                     4100          40
               50         192 Sarah                      4000          41
               50         193 Britney                    3900          42

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               50         188 Kelly                      3800          43
               50         137 Renske                     3600          44
               50         189 Jennifer                   3600          44
               50         141 Trenna                     3500          45
               50         186 Julia                      3400          46
               50         133 Jason                      3300          47
               50         129 Laura                      3300          47
               50         194 Samuel                     3200          48
               50         125 Julia                      3200          48
               50         138 Stephen                    3200          48
               50         180 Winston                    3200          48

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               50         181 Jean                       3100          49
               50         196 Alana                      3100          49
               50         142 Curtis                     3100          49
               30         115 Alexander                  3100          49
               50         197 Kevin                      3000          50
               50         187 Anthony                    3000          50
               50         190 Timothy                    2900          51
               30         116 Shelli                     2900          51
               50         134 Michael                    2900          51
               50         195 Vance                      2800          52
               30         117 Sigal                      2800          52

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               50         183 Girard                     2800          52
               50         130 Mozhe                      2800          52
               50         139 John                       2700          53
               50         126 Irene                      2700          53
               50         198 Donald                     2600          54
               50         199 Douglas                    2600          54
               30         118 Guy                        2600          54
               50         143 Randall                    2600          54
               50         140 Joshua                     2500          55
               30         119 Karen                      2500          55
               50         182 Martha                     2500          55

    DEPARTMENT_ID EMPLOYEE_ID FIRST_NAME               SALARY SALARY_RANK
    ------------- ----------- -------------------- ---------- -----------
               50         131 James                      2500          55
               50         144 Peter                      2500          55
               50         191 Randall                    2500          55
               50         127 James                      2400          56
               50         135 Ki                         2400          56
               50         128 Steven                     2200          57
               50         136 Hazel                      2200          57
               50         132 TJ                         2100          58

    107 rows selected.

    SQL>

     
     
    soushi01 likes this.
  4. soushi01

    soushi01 Active Member

    Messages:
    5
    Likes Received:
    0
    Trophy Points:
    55
    Hi, Dariyoosh

    Thanks your solution :D

    thanks