|--------------------- |------------------ | | 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