Sql 第一个顺序是D之前的值DK,然后是使用cases的值的数字部分

Sql 第一个顺序是D之前的值DK,然后是使用cases的值的数字部分,sql,database,Sql,Database,我需要使用以下规则订购一些值: D之前以DK开始的值 按字母顺序在这两个组中排序 因此,这些值如下所示: DK207 D107 DK107 D099 他们希望最终得到: DK107 DK207 D099 D107 我目前的尝试: select * from customers order by case WHEN substring(code,1,2) = 'DK' then substring(code,1,2) WHEN substring(code,1,1) =

我需要使用以下规则订购一些值:

  • D之前以DK开始的值
  • 按字母顺序在这两个组中排序
因此,这些值如下所示:

  • DK207
  • D107
  • DK107
  • D099
他们希望最终得到:

  • DK107
  • DK207
  • D099
  • D107
我目前的尝试:

select *
from customers
order by case
    WHEN substring(code,1,2) = 'DK' then substring(code,1,2)
    WHEN substring(code,1,1) = 'D' then substring(code,1)
END desc,
case
    WHEN substring(code,1,2) = 'DK' then substring(code,3)
    WHEN substring(code,1,1) = 'D' then substring(code,2)
END asc;
这对于DK值来说似乎很好,但是对于以D开头的值来说却很糟糕。
它们被正确地分组,但带D的似乎按降序排列。

添加
,1
,如图所示

否则你会拿走一切

select *
from customers
order by case
    WHEN substring(code,1,2) = 'DK' then substring(code,1,2)
    WHEN substring(code,1,1) = 'D' then substring(code,1,1)    <----- Importanat change!!!
END desc,
case
    WHEN substring(code,1,2) = 'DK' then substring(code,3)
    WHEN substring(code,1,1) = 'D' then substring(code,2)
END asc;
选择*
来自客户
逐案订购
当子字符串(代码,1,2)=‘DK’时,则子字符串(代码,1,2)

当子字符串(代码,1,1)=‘D’时,则子字符串(代码,1,1)在指示位置添加
,1

否则你会拿走一切

select *
from customers
order by case
    WHEN substring(code,1,2) = 'DK' then substring(code,1,2)
    WHEN substring(code,1,1) = 'D' then substring(code,1,1)    <----- Importanat change!!!
END desc,
case
    WHEN substring(code,1,2) = 'DK' then substring(code,3)
    WHEN substring(code,1,1) = 'D' then substring(code,2)
END asc;
选择*
来自客户
逐案订购
当子字符串(代码,1,2)=‘DK’时,则子字符串(代码,1,2)

当substring(代码,1,1)=‘D’时,那么substring(代码,1,1)你能提到RDBMS吗?你能提到RDBMS吗?事实上,我在第一次做第二部分时复制了该部分,我想我错过了该部分。事实上,我在第一次做第二部分时复制了该部分,我想我错过了该部分。