Maison  >  Questions et réponses  >  le corps du texte

MySQL : Comment utiliser CASE avec la clause ORDER BY

J'ai une procédure stockée qui doit renvoyer une table après avoir filtré les lignes en fonction de l'entrée. Deux des entrées sont sort_columnsort_dir。查询必须在 sort_dir 方向(ASC 或 DESC)中 ORDER BY sort_column.

J'ai essayé la requête suivante sans succès. La requête ci-dessous a été simplifiée pour inclure uniquement les termes pertinents. Les autres filtres fonctionnent correctement sans aucun problème.

  1. SELECT * FROM 表 ORDER BY sort_column sort_dir
  2. SELECT * FROM table ORDER BY CAS sort_column quand 'col1' alors col1_name QUAND 'col2' ALORS col2_name FIN CASE sort_dir QUAND 'asc' ALORS ASC AUTRE DESC FIN

  3. J'ai connecté 2 entrées à 1 entrée au format _ et j'ai essayé ce qui suit :

    SELECT * FROM table ORDER BY CASE sort_input
      WHEN 'col1_asc' THEN col1_name ASC
      WHEN 'col1_desc' THEN col1_name DESC
      WHEN 'col2_asc' THEN col2_name ASC
      WHEN 'col2_desc' THEN col2_name DESC END

Je reçois toujours l'erreur #1064. C'est différent dans chacun des cas ci-dessus, mais pointe toujours vers la section "CASE". C'est l'erreur avec l'option 2 mentionnée ci-dessus

##1064 - Il y a une erreur dans votre syntaxe SQL ; vérifiez le manuel de la version de votre serveur MySQL pour 'WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE à la ligne 4 Corrigez la syntaxe à utiliser autour'

Le problème ne semble pas être le nom des colonnes. C'est une direction de tri qui ne fonctionne pas. Si j'essaie chacune des options ci-dessus sans les parties "ASC" et "DESC", il n'y a aucun problème.

Est-ce que je fais quelque chose de mal ici ? Existe-t-il un meilleur moyen que CASE ?

Version MySQL : 5.6

P粉463291248P粉463291248353 Il y a quelques jours612

répondre à tous(1)je répondrai

  • P粉294954447

    P粉2949544472023-11-02 11:28:32

    La meilleure façon est multiple 案例 :

    ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC,
             (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC,
             (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC,
             (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,

    Cela peut paraître long. Cependant, rappelez-vous la partie CASE 是返回单个值的表达式。因此,您不能将 ASCDESC 作为 THEN.

    La question du type de données est également importante. Le compilateur SQL détermine le type unique de l'expression CASE. Cela peut entraîner des problèmes inattendus lorsque les colonnes sont de types différents.

    La solution la plus simple consiste à utiliser plusieurs expressions CASE.

    répondre
    0
  • Annulerrépondre