0

次のスクリプトがあります-

select sum(duration) as duration from opr 
       where op in ('GRC','GCQ')
       and timestamp between '20130101000000' and '20130930235959'

値を受け取ります - 34459298秒。これらの制限を含めたいと思います - 期間は

  • <= '18000000' (秒) は 0.14 に乗算する必要があります

  • > '18000000' と <= '27000000' の間の期間は、0.11 に乗算する必要があります

  • 期間 > '27000000' は 0.09 に乗算する必要があります

私はこのケースステートメントで試しました -

   case when duration <= '18000000' 
        then (duration)*0.14
        when duration > '18000000' and duration <= '27000000'
        then (duration)*0.11
        when duration > '27000000' 
        then (duration)*0.09
          else 0 end as bal

ただし、この値は34459298を 0.09 に掛けたものを受け取ります。これは、「27000000」よりも大きいためです。これは意図的ではありません。アイデアは、これら 2 つの演算 ('GRC'、'GCQ') が上記の値で乗算されたすべての秒数です。

これを行うのを手伝っていただけますか?

4

4 に答える 4

3

数値ですかduration、それとも文字列ですか? 数値で比較したほうがいいと思います:

SELECT
    SUM(
      CASE
        WHEN duration <= 18000000 THEN duration * 0.14
        WHEN duration > 18000000 AND duration <= 27000000 THEN duration * 0.11
        WHEN duration > 27000000 THEN duration * 0.09
        ELSE 0
      END
    ) AS duration
  FROM opr 
WHERE
  op IN ('GRC','GCQ')
  AND timestamp BETWEEN '20130101000000' AND '20130930235959'
;
于 2013-10-28T10:19:35.910 に答える
1

これを試して:

select sum(case
        when duration <= '18000000' then (duration)*0.14
        when duration > '18000000' and duration <= '27000000' then (duration)*0.11
        when duration > '27000000' then (duration)*0.09
        else 0
    end) as bal
from opr 
where op in ('GRC','GCQ')
    and timestamp between '20130101000000' and '20130930235959'
于 2013-10-28T10:18:11.093 に答える
1

私はあなたがこれをしたいと思います

select sum(case when duration <= '18000000' then (duration)*0.14
                when duration > '18000000' and duration <= '27000000' then (duration)*0.11
                when duration > '27000000' then (duration)*0.09
                else 0 end as bal) as duration 
from opr 
where op in ('GRC','GCQ')
and timestamp between '20130101000000' and '20130930235959'
于 2013-10-28T10:18:37.783 に答える