sql >> Database >  >> RDS >> Sqlserver

CASE-instructie voor volgorde per clausule met meerdere kolommen en desc/asc-sortering

Je kunt meerdere casussen schrijven, zelfs als ze allemaal dezelfde aandoening hebben.

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END, 
    CASE @OrderByColumn WHEN 1 THEN Location END, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

Eigenlijk specificeert u geen kolom om op te sorteren, maar een expressie.

De case-instructie retourneert null als niet aan de voorwaarde wordt voldaan, dus eigenlijk betekent het:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Dus als @OrderByColumn niet 1 is, retourneert de instructie altijd NULL. Dat sluit overigens niet uit van sorteren, maar het zet al die rijen bij elkaar in het resultaat, waardoor 'SurName' de beslissende sortering binnen die groep rijen wordt.



  1. MySQL twee kolommen tijdstempel standaard NU-waarde ERROR 1067

  2. Hoe kan ik een array met booleaanse waarden opslaan in een MySql-database?

  3. MySQL-serverdetectie op LAN via luisterpoort (Inno Setup)

  4. Gegenereerd script (.sql-bestand) uitvoeren met schema en gegevens in SQL Server 2008