0

私は以下のSQLコードを持っています -

 select distinct opr,  
  CASE
          WHEN timestamp like '201302%' THEN ((SUM (charge / POWER (10, decimals)) OVER (PARTITION BY opr) * 1.15306))
          WHEN timestamp like '201303%' THEN ((SUM (charge / POWER (10, decimals)) OVER (PARTITION BY opr)* 1.14979))
          ELSE 0
       END as exr
  FROM in
group by opr, timestamp, (charge / POWER (10, decimals))

そして、値を受け取ることを期待しています-1080.104079

ここに画像の説明を入力

ただし、2つの値が得られます-

ここに画像の説明を入力

この値 1079.459992 が取得されます。これは、exr がスイープされているためです。これは誤りです。'Feb' の料金は、'Feb' の exr で乗算する必要があるためです。

ここに画像の説明を入力

コードを修正して、真の値である 1080.104079 のみを受け取ることができるようにしてください。

4

1 に答える 1

1

必要な結果が 1 つだけの場合は、CASE ロジックを SUM 関数自体に移動してみてください。

select opr,  
    SUM(CASE
          WHEN timestamp like '201302%' THEN ((charge / POWER (10, decimals)) * 1.15306)
          WHEN timestamp like '201303%' THEN ((charge / POWER (10, decimals)) * 1.14979)
          ELSE 0
       END)
       as exr
  FROM in
group by opr
having opr = 'DOM';

問題の一部は、複数の列でグループ化していて、1 つまたは 2 つのみを選択していることにあるようです。opr 列のみでグループ化すると、「DOM」の行は 1 つだけになります。

于 2013-10-07T21:21:11.753 に答える