IDのためにいくつかのバケットフィールドにデータを持つテーブルがあります。バケットの合計を取り出す関数が必要ですが、関数のパラメータには開始バケットフィールドと終了バケットフィールドが含まれます。データの範囲を照会するときのOracle SQL
だから、私はこのようなテーブルがあった場合:5.00
:私はIDとパラメータのbucket0、のbucket0に送信する場合
ID Bucket0 Bucket30 Bucket60 Bucket90 Bucket120
10 5.00 12.00 10.00 0.0 8.00
、それはのbucket0フィールドの値のみを返しますIDとパラメータBucket30、Bucket120を送信すると、30から120または(12 + 10 + 0 + 8)30.00のバケットの合計が返されます。
はこれに巨大な醜いif parameter1=bucket0 and parameter2=bucket0
then select bucket0
else if parameter1=bucket0 and parameter2=bucket1
then select bucket0 + bucket1
else if parameter1=bucket0 and parameter2=bucket2
then select bucket0 + bucket1 + bucket2
とよりも、この他を書くためのよりよい方法はありますか?
テーブルは既に存在しているので、私はそれ以上のコントロールはありません。私は関数のために自分のパラメータを作ることができますが、私は欲しいです。私はバケツのセットが必要な場合、途中のものはスキップされないので、開始と終了のバケットを指定すると動作すると言うことはできます。私はすべてのバケツが必要なカンマ区切りの文字列を1つ持つことができました。
あなたのデータベース設計が欲しいときに素敵な方法はあまり効果的ではありません。バケット列は別々の列であってはなりません。代わりに、 'bucket'と' bucket_id'という2つのカラムがあり、より多くの行を持っているはずです。 – trincot
@trincotそうかもしれないが、私が言ったように、私はそれを支配していない。 – thursdaysgeek