Heim  >  Fragen und Antworten  >  Hauptteil

SQL; So schreiben Sie eine „Order By“-Anweisung, die wechselt, sobald die erste Übereinstimmung gefunden wird

Entschuldigung, wenn diese Frage schon einmal gestellt wurde.

Das ist meine ursprüngliche Form.

Benutzername Benutzertyp Team
Benjamin Turner Unterstützung Cat Welfare Association
Louis Bennett Haupt Cat Welfare Association
Benjamin Turner Unterstützung Andal Youth Team
Benjamin Turner Unterstützung ACaretalyst
Cynthia Bender Haupt Freiwilligenzentrum
Benjamin Turner Unterstützung Freiwilligenzentrum

Ich möchte es mithilfe der Sortierung neu anordnen, sodass das Hauptkonto an erster Stelle steht und dann die Support-Konten für dasselbe Team. Weitere Teams, die Benjamin unterstützt, aber über kein Masterkonto verfügen, werden unten hinzugefügt.

„Erwartete Ergebnisse“

Benutzername Benutzertyp Team
Louis Bennett Haupt Cat Welfare Association
Benjamin Turner Unterstützung Cat Welfare Association
Cynthia Bender Haupt Freiwilligenzentrum
Benjamin Turner Unterstützung Freiwilligenzentrum
Benjamin Turner Unterstützung Andal Youth Team
Benjamin Turner Unterstützung ACaretalyst

Ich habe es bereits ausprobiert „Sortieren nach Benutzertyp, Team“ führt dazu, dass zuerst alle Hauptkonten und dann die Supportkonten aufgelistet werden (was bedeutet, dass Haupt- und Supportkonten für dasselbe Team nicht zusammengehalten werden)

Benutzername Benutzertyp Team
Louis Bennett Haupt Cat Welfare Association
Cynthia Bender Haupt Freiwilligenzentrum
Benjamin Turner Unterstützung Cat Welfare Association
Benjamin Turner Unterstützung Freiwilligenzentrum
Benjamin Turner Unterstützung Andal Youth Team
Benjamin Turner Unterstützung ACaretalyst

Wenn ich andererseits „Sortieren nach Team, Benutzertyp“ versuche, bleiben die Haupt- und Supportkonten zusammen, aber die Teams ohne Hauptkonto werden zuerst angezeigt (alphabetisch)

Benutzername Benutzertyp Team
Benjamin Turner Unterstützung ACaretalyst
Benjamin Turner Unterstützung Andal Youth Team
Louis Bennett Haupt Cat Welfare Association
Benjamin Turner Unterstützung Cat Welfare Association
Cynthia Bender Haupt Freiwilligenzentrum
Benjamin Turner Unterstützung Freiwilligenzentrum

Gibt es eine Möglichkeit, die Reihenfolge so zu strukturieren, dass in der ersten Zeile immer zuerst das Hauptkonto und dann der zugehörige Support für dasselbe Team angezeigt wird (unabhängig von der alphabetischen Reihenfolge der Teams)? Dann werden alle verbleibenden Support-Konten (ohne Master-Konto) unten hinzugefügt

P粉808697471P粉808697471423 Tage vor467

Antworte allen(1)Ich werde antworten

  • P粉614840363

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

    所以我们想根据这些规则进行排序

    • 首先完成团队(其中具有Main UserType的用户)
    • 然后由团队(以确保MainSupport一起进行)
    • 最后,在每个团队中按UserType排序:MainSupport 以及所有其他
    • >

    我们可以尝试这样做

    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

    Antwort
    0
  • StornierenAntwort