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 的值似乎是按降序排序的。

4

1 回答 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;

SQL小提琴

于 2013-02-27T11:27:31.993 回答