如果之前有人提出过这个问题,我深表歉意。
这是我原来的桌子。
用户名 | 用户类型 | 团队 |
---|---|---|
本杰明·特纳 | 支持 | 猫福利协会 |
路易斯·贝内特 | 主要 | 猫福利协会 |
本杰明·特纳 | 支持 | 安达尔青年 |
本杰明·特纳 | 支持 | Caretalyst |
辛西娅·本德 | 主要 | 义工中心 |
本杰明·特纳 | 支持 | 义工中心 |
我想使用 Order by 重新排列它,这样主帐户将首先出现,然后是同一个团队的支持帐户。 Benjamin支持但没有主账户的其他团队,将在底部添加。
“预期结果”
用户名 | 用户类型 | 团队 |
---|---|---|
路易斯·贝内特 | 主要 | 猫福利协会 |
本杰明·特纳 | 支持 | 猫福利协会 |
辛西娅·本德 | 主要 | 义工中心 |
本杰明·特纳 | 支持 | 义工中心 |
本杰明·特纳 | 支持 | 安达尔青年 |
本杰明·特纳 | 支持 | Caretalyst |
我试过了 “按用户类型、团队排序”导致所有主要帐户首先列出,然后是支持帐户(意味着同一团队的主要和支持不粘在一起)
用户名 | 用户类型 | 团队 |
---|---|---|
路易斯·贝内特 | 主要 | 猫福利协会 |
辛西娅·本德 | 主要 | 义工中心 |
本杰明·特纳 | 支持 | 猫福利协会 |
本杰明·特纳 | 支持 | 义工中心 |
本杰明·特纳 | 支持 | 安达尔青年 |
本杰明·特纳 | 支持 | Caretalyst |
另一方面,如果我尝试“按团队排序,用户类型”,那么主帐户和支持帐户会粘在一起,但是没有任何 VOA 的团队将首先出现(按字母顺序排列)
用户名 | 用户类型 | 团队 |
---|---|---|
本杰明·特纳 | 支持 | Caretalyst |
本杰明·特纳 | 支持 | 安达尔青年 |
路易斯·贝内特 | 主要 | 猫福利协会 |
本杰明·特纳 | 支持 | 猫福利协会 |
辛西娅·本德 | 主要 | 义工中心 |
本杰明·特纳 | 支持 | 义工中心 |
有什么方法可以让第一行始终是主帐户,然后是同一团队的相关支持(无论团队的字母顺序如何) 然后将在底部添加任何剩余的支持帐户(没有任何主帐户)
所以我们要按照这些规则排序
Team
s(其中有一个用户具有Main
UserType
)Team
(确保Main
和Support
一起去)Team
中按UserType
排序:Main
,Support
和所有其他我们可以尝试这样做
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