SQL ORDER BY Doutes

|--------------------- |------------------ | | AttendanceCode | AttendanceDescription | |--------------------- |------------------ | | MC | Medical Leave | |--------------------- |------------------ | | NAPFA | NAPFA | |--------------------- |------------------ | | Present | Present | |--------------------- |------------------ | 

J'utilise SQL Server 2014. J'ai une table avec deux colonnes, AttendanceCode et AttendanceDescription et j'utilise une list déroulante pour afficher la AttendanceDescription. Je voudrais que l'ordre dropdownlist affiche "Present" en premier. J'ai essayé d'utiliser cette requête:

 SELECT AttendanceCode, AttendanceDescription FROM journalattendancestatus ORDER BY (CASE AttendanceDescription WHEN 'P' THEN 1 ELSE NULL END) AttendanceDescription 

Et ça

 SELECT AttendanceCode, AttendanceDescription FROM journalattendancestatus ORDER BY CASE WHEN AttendanceDescription = 'Present' THEN 1 ELSE 2 END, AttendanceDescription"; 

Mais aucun d'entre eux ne fonctionne. J'ai aussi essayé de le changer en AttendanceCode où 'P' représente 'Présent'.

Utiliser la colonne AttendanceDescription une seule fois dans la clause ORDER BY

 SELECT AttendanceCode, AttendanceDescription FROM journalattendancestatus ORDER BY CASE WHEN AttendanceCode = 'Present' THEN 1 WHEN AttendanceCode = 'MC' THEN 2 WHEN AttendanceCode = 'NAPFA' THEN 3 END 

Trier par est simplement de sortinger vos données par une colonne.

Exemple:

 SELECT * FROM user WHERE AGE=18 ORDER BY NAME DESC 

Cela prendra votre SQL et le order dans l'ordre alphabétique inverse.

Qu'est-ce que vous essayez de faire exactement? Je pourrais peut-être vous donner une solution à ce que vous essayez d'accomplir.

pour cette requête, les zéros viendront en premier.

 ORDER BY (CASE AttendanceDescription WHEN 'P' THEN 1 ELSE NULL END) AttendanceDescription 

Changez pour

 WHEN 'P' THEN 1 ELSE 2 END 

deuxième requête est presque proche ..

 ORDER BY CASE WHEN AttendanceDescription = 'Present' THEN 1 ELSE 2 END, AttendanceDescription"; 

Mais quand 1 a des liens il retombe encore à AttendanceDescription pour casser des cravates, ainsi dans ce cas il peut être n'importe quelle chose.

Pas la meilleure option mais juste une idée:

 SELECT AttendanceCode, AttendanceDescription, 1 AS OrderIndex FROM journalattendancestatus WHERE AttendanceDescription = 'P' UNION SELECT AttendanceCode, AttendanceDescription, 2 AS OrderIndex FROM journalattendancestatus WHERE AttendanceDescription != 'P' ORDER BY OrderIndex, AttendanceCode, AttendanceDescription 

Votre deuxième requête fonctionne. Il a une erreur de syntaxe. J'ai supprimé ',' près de l'instruction END et des guillemets à la fin de la requête.

 SELECT AttendanceCode, AttendanceDescription FROM journalattendancestatus ORDER BY CASE WHEN AttendanceDescription = 'Present' THEN 1 ELSE 2 END AttendanceDescription; 

Dans la première requête, vous searchz une lettre "P" qui n'est pas présente dans votre colonne. Vous pouvez utiliser comme ici.

 ORDER BY (CASE when AttendanceDescription like 'Pre%' THEN 1 ELSE NULL END) AttendanceDescription 

Celui-ci fonctionne pour moi dans HANA

 SELECT AttendanceCode, AttendanceDescription FROM journalattendancestatus ORDER BY (CASE WHEN AttendanceDescription= 'Present' THEN 1 ELSE 0 END) DESC