それで、相互に排他的ではない範囲を使用して行を数える方法があるのだろうか?SQL - 範囲を使用してカウントするが、排他的ではない
_ValueA_,_ValueB_,_ValueC_
E1 | 1 | 0
E2 | 6 | 1
E3 | 12 | 4
E4 | 23 | 2
_ValueX_,_ValueY_
X1 | 0
X2 | 1
X3 | 4
X4 | 2
そして、私は次のような結果が欲しい::(おそらく悪い言葉遣い)
のは、私は、次の表があるとしましょう、私はネストされたCASE WHEN
ステートメントを使用している実行しようとしました何
_VRange_,_ValueA_,_ValueB_,_ValueC_,_ValueX_
<5 | E1 | 1 | 0 | X1
<10 | E1 | 1 | 0 | X1
<10 | E2 | 6 | 1 | X2
<15 | E1 | 1 | 0 | X1
<15 | E2 | 6 | 1 | X2
<15 | E3 | 12 | 4 | X3
....
、
CASE WHEN ValueA < 5 THEN '<5' VRange ELSE
CASE WHEN ValueA < 10 THEN '<10' ELSE
-- Nested to 20
END
END
ですが、これは排他的です(つまり、あなたのValueA
は、それはそれは
は、私は、単にWHERE
条項に従ってで選択UNION
を使用してみました)< 10枝に入ることはありません5の上にもあるが、それは結果ので、それは、クロールにスロークエリを作った、10を超えています基本的に私のテーブル(s)cardinality times 10だったセットでも、それはひどく長いために参加していました。
いい方法があります。
私はOracle DBを使用していますので、Oracle固有の構文を使用しないようにしたいと思いますが、クエリが短くなる場合は、私の目的には何も見つかりませんでした。
アイデア?
は、case式の開始時に、あなたの最大値を置きます。つまり'valuea> 20の場合は '> 20'、valuea <10なら '<10' ... end'です。また、ケースの式をネストする必要はありません。複数のwhen節を持つことができます! Oracleは、一致する最初のwhen句に達すると停止します。 – Boneist
それはまさに私が欲しくないことです、私は繰り返しが欲しいです。私はいくつかの節(<5、<10、<15、<20)を持っています。もし3のような値があれば、その結果をVRange欄に<5 。また、私はそれらを単一の列に入れるために自分のケースを入れ子にしなければならないと思いましたか? – Wep0n
この場合、サブクエリで範囲を定義してから、その範囲にテーブルを参加させる必要があります。これは、ゴードン氏の答えに示されています。 – Boneist