SQL 按 4 列排序,其中 1 列按 True 和 False Both 排序

问题描述 投票:0回答:1

我正在寻找需要按 4 列排序的销售人员列表 - IsAvailable DESC、EmailStatus DESC、FirstName ASC、LastName ASC。

  • IsAvailable(使开关按钮可编辑)-这意味着如果销售人员 准备好参加约会(排序 - 先正确后错误)
  • EmailStatus(如果为 False,则显示红色图标)- 这意味着如果 销售人员有有效邮箱。 (排序 - 先为真,后为假,但是 当为 false 时,isAvailable 也应该为 false)。
  • 名字 和 LastName - 按 ASC 顺序排列的名字和姓氏

当前排序列表:

所需排序:

所需的单词排序列表:

  1. 首先它应该处于活动状态,IsAvailable True & EmailStatus True & First ASC & Last ASC
  2. 然后它应该是活动或非活动的,IsAvailable True/False,但 EmailStatus False,First 和 Last ASC
  3. Last 应该是 IsAvailable False 和 EmailStatus True(这是没有红色图标的 Inactive 开关),First 和 Last ASC

我尝试过的代码:

SELECT 
    {Collaborator}.*,
    {ShowroomMember}.*,
    {WorkRole}.*,
    (
        SELECT 
            COUNT({ShowroomMember}.[Id])
        FROM 
            {ShowroomMember}
        WHERE 
            {ShowroomMember}.[CollaboratorId] = {Collaborator}.[Id]    
    )
FROM {ShowroomMember}
    INNER JOIN {Collaborator} ON {Collaborator}.[Id] = {ShowroomMember}.[CollaboratorId]
    INNER JOIN {WorkRole} ON {ShowroomMember}.[WorkRoleId] = {WorkRole}.Id
WHERE
    **{ShowroomMember}.[ShowroomId] = @ShowroomId
ORDER BY {ShowroomMember}.[IsAvailable] DESC, {Collaborator}.[EmailStatus] DESC, 
{Collaborator}.[FirstName] ASC, {Collaborator}.[LastName] ASC**
sql mysql join sql-order-by
1个回答
0
投票

对使用图片的社区表示歉意。
对于任何寻找解决方案的人来说,我可以通过使用

CASE
来解决这个问题。这是一次漫长的反复试验,因为多次将名字和姓氏与 IsAvailable 和 EmailStatus 混合在一起,导致排序不符合解决方案。代码可能很难看,但它可以工作。您可以更新并使其看起来
pretty

解决方案:

ORDER BY
CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=1 THEN {ShowroomMember}.[IsAvailable] END DESC,
CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=1 THEN {Collaborator}.[FirstName] END ASC,
CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=1 THEN {Collaborator}.[LastName] END ASC,

CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=0 THEN {ShowroomMember}.[IsAvailable] END ASC,
CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=0 THEN {Collaborator}.[FirstName] END ASC,
CASE WHEN {Collaborator}.[EmailStatus]=1 AND {ShowroomMember}.[IsAvailable]=0 THEN {Collaborator}.[LastName] END ASC,

CASE
    WHEN {Collaborator}.[EmailStatus]=0 AND ({ShowroomMember}.[IsAvailable]=0 OR {ShowroomMember}.[IsAvailable]=1)
    THEN {Collaborator}.[FirstName] END ASC
© www.soinside.com 2019 - 2024. All rights reserved.