update sql




Comment afficher les enregistrements d'une table ordonnée comme dans la clause where? (3)

Ajoutez ceci ORDER BY à la fin de la requête:

order by case name when 'Yaksha' then 1
                   when 'Arun'   then 2
                   when 'Naveen' then 3
         end

(Il n'y a pas d'autre moyen d'obtenir cet ordre.Vous avez besoin d'un ORDER BY pour obtenir un ordre de jeu de résultats spécifique.)

J'essaie d'afficher les enregistrements, l'ordre comme dans la clause where .. exemple:

select name from table where name in ('Yaksha','Arun','Naveen');

Il affiche Arun,Naveen,Yaksha (alphabetical order)
Je veux l'afficher dans le même ordre que ie 'Yaksha''Arun','Naveen'
comment afficher ceci ... J'utilise oracle db.


Cela peut être un peu maladroit, mais vous pouvez créer un ordre personnalisé avec une expression case :

SELECT   *
FROM     my_table
WHERE    name IN ('Yaksha', 'Arun','Naveen')
ORDER BY CASE name WHEN 'Yaksha' THEN 1
                   WHEN 'Arun'   THEN 2
                   WHEN 'Naveen' THEN 3
         END ASC

Une option légèrement plus longue, mais qui empêche la duplication des littéraux de chaîne, consiste à utiliser une sous-requête:

SELECT   m.*
FROM     my_table m
JOIN     (SELECT 'Yaksha' AS name, 1 AS name_order FROM dual
          UNION ALL
          SELECT 'Arun' AS name, 2 AS name_order FROM dual
          UNION ALL
          SELECT 'Naveen' AS name, 3 AS name_order FROM dual) o 
         ON o.name = m.name
ORDER BY o.name_order ASC

Vous pouvez essayer avec quelque chose comme:

SELECT   *
FROM     test
WHERE    name IN (  'Yaksha', 'Arun', 'Naveen'  )
ORDER BY instr ( q'['Yaksha', 'Arun', 'Naveen']', name ) ASC

Cette façon de faire pourrait être utile si votre liste IN est en quelque sorte dynamique.





where-clause