Rumah  >  Soal Jawab  >  teks badan

SQL; Cara menulis pernyataan "Pesan Oleh" yang bertukar sebaik sahaja padanan pertama ditemui

Maaf jika soalan ini pernah ditanya sebelum ini.

Ini adalah bentuk asal saya.

Nama pengguna Jenis Pengguna Pasukan
Benjamin Turner Sokongan Persatuan Kebajikan Kucing
Louis Bennett Utama Persatuan Kebajikan Kucing
Benjamin Turner Sokongan Pasukan Belia Andal
Benjamin Turner Sokongan ACaretalyst
Cynthia Bender Utama Pusat Sukarelawan
Benjamin Turner Sokongan Pusat Sukarelawan

Saya mahu menyusun semula menggunakan pengisihan supaya akaun utama didahulukan, kemudian akaun sokongan untuk pasukan yang sama. Pasukan lain yang Benjamin sokong tetapi tidak mempunyai akaun induk akan ditambah di bahagian bawah.

"Hasil yang dijangkakan"

Nama pengguna Jenis Pengguna Pasukan
Louis Bennett Utama Persatuan Kebajikan Kucing
Benjamin Turner Sokongan Persatuan Kebajikan Kucing
Cynthia Bender Utama Pusat Sukarelawan
Benjamin Turner Sokongan Pusat Sukarelawan
Benjamin Turner Sokongan Pasukan Belia Andal
Benjamin Turner Sokongan ACaretalyst

Saya sudah mencubanya "Isih mengikut jenis pengguna, pasukan", ini akan menyebabkan semua akaun utama disenaraikan dahulu, kemudian akaun sokongan (bermaksud akaun utama dan sokongan untuk pasukan yang sama tidak akan disatukan)

Nama pengguna Jenis Pengguna Pasukan
Louis Bennett Utama Persatuan Kebajikan Kucing
Cynthia Bender Utama Pusat Sukarelawan
Benjamin Turner Sokongan Persatuan Kebajikan Kucing
Benjamin Turner Sokongan Pusat Sukarelawan
Benjamin Turner Sokongan Pasukan Belia Andal
Benjamin Turner Sokongan ACaretalyst

Sebaliknya, jika saya cuba "Isih mengikut Pasukan, Jenis Pengguna", akaun Utama dan Sokongan terperangkap bersama, tetapi Pasukan tanpa sebarang Utama akan muncul dahulu (mengikut abjad)

Nama pengguna Jenis Pengguna Pasukan
Benjamin Turner Sokongan ACaretalyst
Benjamin Turner Sokongan Pasukan Belia Andal
Louis Bennett Utama Persatuan Kebajikan Kucing
Benjamin Turner Sokongan Persatuan Kebajikan Kucing
Cynthia Bender Utama Pusat Sukarelawan
Benjamin Turner Sokongan Pusat Sukarelawan

Adakah terdapat sebarang cara untuk menstrukturkan susunan supaya baris pertama sentiasa menjadi akaun utama dahulu, kemudian sokongan yang berkaitan untuk pasukan yang sama (tanpa mengira susunan abjad pasukan) Kemudian mana-mana akaun sokongan yang tinggal (tanpa sebarang akaun induk) akan ditambahkan ke bahagian bawah

P粉808697471P粉808697471372 hari yang lalu407

membalas semua(1)saya akan balas

  • P粉614840363

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

    Jadi kami ingin menyusun berdasarkan peraturan ini

    • Pengguna yang menyelesaikan 团队(其中具有Main UserType dahulu)
    • Kemudian teruskan bersama dengan 团队(以确保MainSupport)
    • Akhir sekali, dalam setiap 团队中按UserType排序:MainSupport dan semua yang lain
    • >

    Kita boleh cuba ini

    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

    balas
    0
  • Batalbalas