首頁  >  問答  >  主體

SQL;如何寫「Order By」語句,只要找到第一個匹配項,它就會切換

如果以前曾提出過這個問題,我深表歉意。

這是我原來的表格。

使用者名稱 使用者類型 團隊
本傑明·特納 支援 貓福利協會
路易斯貝內特 主要 貓福利協會
本傑明·特納 支援 安達爾青年隊
本傑明·特納 支援 ACaretalyst
辛西婭·本德 主要 志工中心
本傑明·特納 支援 志工中心

我想使用排序方式重新排列它,以便主帳戶首先出現,然後是同一團隊的支援帳戶。本傑明支援但沒有主帳戶的其他團隊將添加在底部。

「預期結果」

使用者名稱 使用者類型 團隊
路易斯貝內特 主要 貓福利協會
本傑明·特納 支援 貓福利協會
辛西婭·本德 主要 志工中心
本傑明·特納 支援 志工中心
本傑明·特納 支援 安達爾青年隊
本傑明·特納 支援 ACaretalyst

我已經嘗試過了 “按使用者類型、團隊排序”,這會導致首先列出所有主帳戶,然後是支援帳戶(意味著同一團隊的主帳戶和支援帳戶不會黏在一起)

使用者名稱 使用者類型 團隊
路易斯貝內特 主要 貓福利協會
辛西婭·本德 主要 志工中心
本傑明·特納 支援 貓福利協會
本傑明·特納 支援 志工中心
本傑明·特納 支援 安達爾青年隊
本傑明·特納 支援 ACaretalyst

另一方面,如果我嘗試“按團隊、用戶類型排序”,則主帳戶和支援帳戶會粘在一起,但沒有任何 Main 的團隊將首先出現(按字母順序排列)

使用者名稱 使用者類型 團隊
本傑明·特納 支援 ACaretalyst
本傑明·特納 支援 安達爾青年隊
路易斯貝內特 主要 貓福利協會
本傑明·特納 支援 貓福利協會
辛西婭·本德 主要 志工中心
本傑明·特納 支持 志工中心

是否有任何方法可以建立順序,使第一行始終首先是主帳戶,然後是同一團隊的相關支援(無論團隊的字母順序如何) 然後,任何剩餘的支援帳戶(沒有任何主帳戶)將添加到底部

P粉808697471P粉808697471423 天前465

全部回覆(1)我來回復

  • 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

    回覆
    0
  • 取消回覆