Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ORDER BY with Case-Statement DESC

  • How to ORDER BY with a CASE-Statement
    • first group: null values in date-column Col1 sorted by date-column Col2 DESC
    • second group: not-null values in date-column-Col1 sorted by Col1 DESC

I've tried following:

SELECT columns FROM tables WHERE condition
ORDER BY 
    case when Table1.Col1 IS NULL     then 0 end, Table2.Col2 DESC,
    case when Table1.Col1 IS NOT NULL then 1 end, Table1.Col1 DESC

But the sort order is wrong, the NOT NULL values are first(sorted by Col2 instead of Col1). I think i've missed a detail.

like image 637
Tim Schmelter Avatar asked Jul 07 '11 08:07

Tim Schmelter


2 Answers

SELECT columns FROM tables 
WHERE condition 
ORDER BY      
   case when Table1.Col1 IS NULL then 0 else 1 end ASC      
   ,case when Table1.Col1 IS NULL then Table2.Col2 else Table1.Col1 end DESC
like image 53
Johan Avatar answered Oct 12 '22 19:10

Johan


This should work - just make the first column 0 or 1 based on whether it's null or not:

SELECT columns FROM tables WHERE condition
ORDER BY 
    case 
        when Table1.Col1 IS NULL     then 0 
                                     else 1
    end,
    case
        when Table1.Col1 IS NULL     then Table1.Col2
                                     else Table1.Col1
    end
like image 21
Petar Ivanov Avatar answered Oct 12 '22 19:10

Petar Ivanov