0

こんばんは!

SWIMMERという名前のテーブルがあり、(TIMEという名前のNUMERICフィールドで)特定の間隔でいくつかの値の一致数を見つける必要があります(私はOracle10gを使用しています)。私はそのようなものを示す必要があります:

23 以上 TIME 値が 300 の Horizo​​ntalBar を表示します。 22,3 以上 TIME マイナー または
同等 23 値が 140 の
Horizo​​ntalBar を表示します。
TIME マイナーまたは等しい 21,6 値 3 の Horizo​​ntalBar を表示します

そのようなリターンを持つクエリを持つことは可能ですか?どうすればそのクエリを組み立てることができますか? (注:マイナーまたはイコールはシンボルです。毎回エラーが発生するため、ここに投稿できません)

よろしくお願いします、

4

1 に答える 1

1

次のようなものを試してください(ここでは sqlfiddle です):

select case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
        end   || ' with value '|| count(*) v
from your_table
group by case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
         end 

そして結果:

21,6 > TIME >= 20,9 with value 8 
20,9 > TIME with value 4 
22,3 > TIME >= 21,6 with value 6 
23 > TIME >= 22,3 with value 15 
23 =< TIME with value 66

更新: DavidAldrige が提案したように、サブクエリを使用できます。

select intrvl || ' with value '|| count(*) v
from
(select case 
           when time >= 23 then '23 =< TIME'
           when time < 23 and time >= 22.3 then '23 > TIME >= 22,3'
           when time < 22.3 and time >= 21.6 then '22,3 > TIME >= 21,6'
           when time < 21.6 and time >= 20.9 then '21,6 > TIME >= 20,9'
           else '20,9 > TIME'
        end   intrvl, time
from t)
group by intrvl

そして、ここに別のデモがあります

于 2013-04-17T05:20:25.863 に答える