recherche

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

SQL ; Comment écrire une instruction « Order By » qui change dès que la première correspondance est trouvée

Désolé si cette question a déjà été posée.

C'est mon formulaire original.

Nom d'utilisateur Type d'utilisateur Équipe
Benjamin Turner Support Association de protection des chats
Louis Bennett Principal Association de protection des chats
Benjamin Turner Support Équipe des jeunes d'Andal
Benjamin Turner Support ACaretalyste
Cynthia Bender Principal Centre des bénévoles
Benjamin Turner Support Centre des bénévoles

Je souhaite le réorganiser en utilisant le tri pour que le compte principal vienne en premier, puis les comptes support de la même équipe. Les autres équipes prises en charge par Benjamin mais qui ne disposent pas de compte principal seront ajoutées en bas.

"Résultats attendus"

Nom d'utilisateur Type d'utilisateur Équipe
Louis Bennett Principal Association de protection des chats
Benjamin Turner Support Association de protection des chats
Cynthia Bender Principal Centre des bénévoles
Benjamin Turner Support Centre des bénévoles
Benjamin Turner Support Équipe des jeunes d'Andal
Benjamin Turner Support ACaretalyste

Je l'ai déjà essayé "Trier par type d'utilisateur, équipe", ce qui fait que tous les comptes principaux sont répertoriés en premier, puis les comptes de support (ce qui signifie que les comptes principal et de support de la même équipe ne seront pas collés ensemble)

Nom d'utilisateur Type d'utilisateur Équipe
Louis Bennett Principal Association de protection des chats
Cynthia Bender Principal Centre des bénévoles
Benjamin Turner Support Association de protection des chats
Benjamin Turner Support Centre des bénévoles
Benjamin Turner Support Équipe des jeunes d'Andal
Benjamin Turner Support ACaretalyste

Par contre, si j'essaye "Trier par Équipe, Type d'Utilisateur", les comptes Principal et Support sont collés ensemble, mais les Équipes sans aucun Principal apparaîtront en premier (par ordre alphabétique)

Nom d'utilisateur Type d'utilisateur Équipe
Benjamin Turner Support ACaretalyste
Benjamin Turner Support Équipe des jeunes d'Andal
Louis Bennett Principal Association de protection des chats
Benjamin Turner Support Association de protection des chats
Cynthia Bender Principal Centre des bénévoles
Benjamin Turner Support Centre des bénévoles

Y a-t-il un moyen de structurer l'ordre pour que la première ligne soit toujours le compte principal en premier, puis les supports associés pour la même équipe (quel que soit l'ordre alphabétique des équipes) Ensuite, tous les comptes de support restants (sans compte principal) seront ajoutés en bas

P粉808697471P粉808697471482 Il y a quelques jours517

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

  • P粉614840363

    P粉6148403632023-09-13 13:12:21

    Nous voulons donc trier en fonction de ces règles

    • Utilisateurs ayant terminé 团队(其中具有Main UserType en premier)
    • Puis procédez ensemble par 团队(以确保MainSupport)
    • Enfin, dans chaque 团队中按UserType排序:MainSupport et dans tous les autres
    • >

    Nous pouvons essayer ça

    with MyUsers as (
      select user_name,
             Usertype,
             Team,
             case 
               when exists (select 1 
                              from MyTable m 
                             where m.Team = Team 
                               and m.Usertype = 'Main') then 1
               else 2
             end CompleteGroupOrder,     
             case 
               when Usertype = 'Main' then 1
               when Usertype = 'Support' then 2
               else 3
             end TeamOrder
        from MyTable)
    
      select user_name,
             Usertype,
             Team
        from MyUsers
    order by CompleteGroupOrder,
             Team, 
             TeamOrder

    répondre
    0
  • Annulerrépondre