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

Comment puis-je créer une requête SQL qui utilise la Col A comme clé de tri primaire, mais si la Col A est vide, utilise la Col B comme clé de tri primaire ?

En utilisant MariaDB, j'ai une vue qui fournit des informations, notamment la date de l'événement et si l'invitation a été acceptée. Le champ de eventdate 是类型为 date 的事件日期。 accepted 是类型为 tinyint est 0 si l'invitation est rejetée, 1 si l'invitation est acceptée, sinon il vaut par défaut NULL.

Je souhaite développer une requête qui trie par accepté et eventdate afin que ma valeur acceptedeventdate 排序,这样我的NULL值将出现在eventdate顺序的最前面。然而,如果accepted不为NULL,则希望按照eventdateNULL

apparaisse en premier dans l'ordre eventdate. Cependant, si accepted n'est pas

NULL

, vous souhaitez trier par date d'événement.

从邀请视图中选择* ORDER BY已接受,eventdateMa requête actuelle est :

accepted = NULL Cependant, cette requête trie le tableau de manière à ce que toutes les valeurs soient au début, toutes les valeurs 0

soient à la fin et enfin toutes les valeurs

1

soient à la fin, comme ceci :

eventname | eventdate  | accepted
---------------------------------
Event 1   | 2022-04-14 | NULL
Event 2   | 2022-04-25 | NULL
Event 3   | 2022-03-28 | 0
Event 4   | 2022-05-03 | 0
Event 5   | 2022-04-14 | 1
Event 6   | 2022-05-01 | 1
🎜J'espère obtenir des résultats similaires à celui-ci : 🎜
eventname | eventdate  | accepted
---------------------------------
Event 1   | 2022-04-14 | NULL
Event 2   | 2022-04-25 | NULL
Event 3   | 2022-03-28 | 0
Event 5   | 2022-04-14 | 1
Event 6   | 2022-05-01 | 1
Event 4   | 2022-05-03 | 0
🎜
P粉052724364P粉052724364421 Il y a quelques jours648

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

  • P粉242126786

    P粉2421267862023-09-16 09:12:10

    Une façon consiste à utiliser la condition CASE pour trier les résultats

    SELECT * 
    FROM  invite_view 
    ORDER BY CASE WHEN accepted IS NULL THEN accepted
                  ELSE eventDate
             END

    Résultat :

    id nom de l'événement date de l'événement accepté
    1 Événement 1 2022-04-14 null
    2 Événement 2 2022-04-25 null
    3 Événement 3 2022-03-28 0
    5 Événement 5 2022-04-14 1
    6 Événement 6 2022-05-01 1
    4 Événement 4 2022-05-03 0

    répondre
    0
  • Annulerrépondre