0

こんにちは、SQL db2 を使用して age_bands を作成しています。

case when age between 0 and 1 then '0-1'
when age between 2 and 3 then '2-3'
.
.
.
when age between 10 and 11 then '10-11'

もちろん、注文すると次のものが得られます。

0-1
10-11
2-3

これは私が望むものではありません。実際の age_bands で注文して取得するにはどうすればよいですか:

0-1
2-3
10-11

?

どうもありがとう。

4

3 に答える 3

1

すでに述べたように、年齢順が最も簡単です。

ただし、バンド番号またはコードを割り当てる必要がある場合、またはバンドごとの合計または統計が必要な場合、またはバンド内のその他の並べ替えが必要な場合は、別の方法でアプローチすることをお勧めします。年齢範囲、おそらくバンド番号またはコード、おそらく年齢バンドの名前、またはその他の「マスター」データを定義する AgeBand テーブルが必要になる場合があります。

その場合は、バンドコードを

left join AgeBand ab   on details.age >= ab.FromAge and details.age <= ab.ToAge
...
order by ab.BandID, ...

しかし、AgeBand テーブルが必要なく、CASE ステートメントを使用して年齢層コードを計算し続けたい場合は、それも問題なく、必要なすべてである可能性があります。

できることは、現在のクエリを共通テーブル式 (CTE) に入れてデータを準備し、CTE に割り当てた名前を元テーブルとして使用して SELECT ステートメントを続行することです。

WITH q AS
(SELECT ...
        CASE WHEN ...  THEN "00-01"
             WHEN ...  THEN "02-03"
             ...
             WHEN ...  THEN "10-11"
        END as bandcode
   FROM yourinputdata as i
   WHERE ...
)
SELECT bandcode, ...
  FROM q
  ORDER BY bandcode, ...
;

引用符の間の WITH とクエリは、共通テーブル式です。最初の行で「q」という名前を付けて、最後に参照します。最終結果を制御するのは下部の全選択です。

于 2013-04-22T15:58:01.990 に答える
0

最も簡単な方法は次のとおりだと思います。

order by min(age)
于 2013-04-22T14:00:46.067 に答える