提问人:Aman Devrath 提问时间:10/26/2023 更新时间:10/27/2023 访问量:39
SQL 按 4 列排序,其中 1 列按 True 和 False 排序
SQL sort by 4 columns with 1 column sorted by True and False Both
问:
我正在寻找一个需要按 4 列排序的销售人员列表 - IsAvailable DESC、EmailStatus DESC、FirstName ASC、LastName ASC。
- IsAvailable(使切换按钮可编辑) - 这意味着如果销售人员 已准备好参加约会(排序 - 先对后错)
- EmailStatus(如果为 False,则显示红色图标) - 这意味着如果 销售人员具有有效的邮箱。(排序 - 首先是 true,然后是 false,但是 如果为 false,则 isAvailable 也应为 false)。
- 名字 和 LastName - 按 ASC 顺序排列的名字和姓氏
必需的单词排序列表:
- 首先,它应该处于活动状态,具有 IsAvailable True 和 EmailStatus True & First ASC 和 Last ASC
- 然后,它应该处于活动或非活动状态,IsAvailable 为 True/False,但 EmailStatus 为 False、First 和 Last ASC
- Last 应为 IsAvailable False 和 EmailStatus True(即不带红色图标的非活动开关)、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**
答:
0赞
Aman Devrath
10/27/2023
#1
为使用图片向社区道歉。
对于任何寻找解决方案的人,我都可以通过使用 .这是一个漫长的试错过程,因为排序不符合解决方案,因为名字和姓氏多次失败,与 IsAvailable 和 EmailStatus 混合使用。代码可能很丑陋,但它有效。您可以更新并使其看起来 .CASE
pretty
我使用了多个具有相同条件的相同条件来对相同条件应用 3 种不同的排序。WHEN
溶液:
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
当状态从不活动更改为活动时,Last 保留列表中销售人员的排序,反之亦然。如果我在上面的代码中使用我用于其他条件的类似方法,它会以不同的方式对其进行排序,因此我必须将 IsAvailable 的 True 和 False 组合在一起,以根据名字和姓氏保留销售人员的排序。CASE
CASE
OR
评论