1

次のルールを使用していくつかの値を注文する必要があります。

  • Dの前にDKで始まる値
  • これらの2つのグループ内でアルファベット順に並べ替えます

したがって、値は次のようになります。

  • 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 に答える