SQL;如何编写“Order By”语句,只要找到第一个匹配项,它就会切换
P粉808697471
P粉808697471 2023-09-12 17:25:22

如果以前曾提出过这个问题,我深表歉意。

这是我原来的表格。

用户名 用户类型 团队
本杰明·特纳 支持 猫福利协会
路易斯·贝内特 主要 猫福利协会
本杰明·特纳 支持 安达尔青年队
本杰明·特纳 支持 ACaretalyst
辛西娅·本德 主要 志愿者中心
本杰明·特纳 支持 志愿者中心

我想使用排序方式重新排列它,以便主帐户首先出现,然后是同一团队的支持帐户。本杰明支持但没有主帐户的其他团队将添加在底部。

“预期结果”

用户名 用户类型 团队
路易斯·贝内特 主要 猫福利协会
本杰明·特纳 支持 猫福利协会
辛西娅·本德 主要 志愿者中心
本杰明·特纳 支持 志愿者中心
本杰明·特纳 支持 安达尔青年队
本杰明·特纳 支持 ACaretalyst

我已经尝试过了 “按用户类型、团队排序”,这会导致首先列出所有主帐户,然后是支持帐户(意味着同一团队的主帐户和支持帐户不会粘在一起)

用户名 用户类型 团队
路易斯·贝内特 主要 猫福利协会
辛西娅·本德 主要 志愿者中心
本杰明·特纳 支持 猫福利协会
本杰明·特纳 支持 志愿者中心
本杰明·特纳 支持 安达尔青年队
本杰明·特纳 支持 ACaretalyst

另一方面,如果我尝试“按团队、用户类型排序”,则主帐户和支持帐户会粘在一起,但没有任何 Main 的团队将首先出现(按字母顺序排列)

用户名 用户类型 团队
本杰明·特纳 支持 ACaretalyst
本杰明·特纳 支持 安达尔青年队
路易斯·贝内特 主要 猫福利协会
本杰明·特纳 支持 猫福利协会
辛西娅·本德 主要 志愿者中心
本杰明·特纳 支持 志愿者中心

是否有任何方法可以构建顺序,使第一行始终首先是主帐户,然后是同一团队的相关支持(无论团队的字母顺序如何) 然后,任何剩余的支持帐户(没有任何主帐户)将添加到底部

P粉808697471
P粉808697471

全部回复(1)
P粉614840363

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

  • 首先完成团队(其中具有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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!