2

2つのカテゴリーの範囲を決定したいと思います。カテゴリAとカテゴリB。Aは1から15で始まり、Bは16から31で始まり、Aは再び32から40で始まります。このクエリを実行すると

select min(range), max(range) 
from table
group by category
order by category

カテゴリAの範囲は1から40、カテゴリBの範囲は16から31になります。範囲を超えて結果を確認したい

Category A 1 to 15
Category B 16 to 31
Category A 32 to 40

それ、どうやったら出来るの?3番目の列が必要ですか?新しいカテゴリの3番目の列がある場合は、それぞれCDEと言うことができます。それらでグループ化して、結果を取得できます。しかし、私はそれを行う方法がわかりません。

私を助けてください。

ありがとう-Adeel

4

2 に答える 2

1

カテゴリを連続する整数で構成されるグループに分割しようとしているとすると、次のように機能します。

select category, diff, min(range), max(range)
from 
(
   select category, range,
      (range - row_number() over (partition by category order by range)) as diff
   from table
) t
group by category
order by 1, 3

このクエリは、カテゴリの特定のグループ内で、番号が順番に増加するという観察に基づいています。したがって、整数のシーケンスを減算すると定数になり、その特定の範囲を識別するために使用できます。

Row_Number()は標準のSQL関数であるため、ほとんどのデータベースで使用できます。

于 2012-05-03T02:18:59.310 に答える
0

再帰CTEが機能するように思えますが、これがどのように機能するか(およびサポートされているかどうか)はRDBMSによって異なります。ただし、それぞれの乗数として使用できるある種の増分カウントを実行できる可能性があります。最大制限までピースアップします。RDBMSをお知らせいただければ、例を示します。

于 2012-05-03T01:40:42.037 に答える