0

私はテーブルを持っていますZXC

select NAME, MONTH, YEAR, DEPT, MONTHVAL, YEARVAL from ZXC

MONTHVALにはいくつかの値があります。名前、部署、月の組み合わせに基づいていくつかの行を集計し、集計値をYEARVAL列に表示したいと考えています。

たとえば、テーブルがある場合

Name   Month  Year Dept Monthval  Yearval

BLAKE   Jan   2011 100   124.542    0 
KING    Feb   2011 200   234.542    0 
KING    Jan   2011 200   27764.464  0 
BLAKE   March 2011 100   0          0 
BLAKE   Feb   2011 400   0          0 
SCOTT   Jan   2011 500   24564.464  0 
KING    March 2011 200   1265.542   0 
KING    April 2011 200   1065.542   0 

次に、結果を次のように表示したい

Name   Month  Year Dept Monthval  Yearval

BLAKE   Jan   2011 100  124.542    124.542
KING    Jan   2011 200  27764.464  27764.464  
SCOTT   Jan   2011 500  24564.464  24564.464 
KING    Feb   2011 200  234.542    27999.006 
BLAKE   Feb   2011 100  0          124.542 
KING    March 2011 200  1265.542   29264.548 
BLAKE   March 2011 100  0          124.542 
KING    April 2011 200  1065.542   30330.09
4

3 に答える 3

1

これはどうですか:

SELECT name
     , dept
     , year
     , SUM( monthval ) yearval
FROM   zxc
GROUP  BY name
        , dept
        , year;

これにより、各年の月次値の合計が生成されます。これがあなたが必要としていたものかどうかはよくわかりませんが、私にはそう見えます。

関数内でROLLUP()or関数 (複数レベルの集計)を使用することで、さらに洗練されたものにすることができます。CUBE()GROUP BY

于 2012-05-17T09:00:53.963 に答える
0

のように聞こえる:

select NAME,
       MONTH,
       YEAR,
       DEPT,
       MONTHVAL,
       SUM(MONTHVAL) OVER (PARTITION BY YEAR) YEARVAL
  from ZXC
于 2012-05-17T14:04:24.350 に答える
0

あなたの出力に基づいて、すべての人の現在の合計が必要なようです。基本的に、次のクエリはこれに対する一般的な解決策を示しています。

SELECT
  Name,
  Month,
  Year,
  Dept,
  Monthval,
  SUM(Monthval) OVER (PARTITION BY Name, Dept ORDER BY Year, Month) AS Yearval
FROM ZXC

Monthただし、月は数字ではなく名前としてテーブルに格納されているように見えるため、による順序付けに問題がある可能性があります。次に、上記を次のように変更します。

SELECT
  Name,
  Month,
  Year,
  Dept,
  Monthval,
  SUM(Monthval) OVER (
    PARTITION BY Name, Dept
    ORDER BY TO_DATE(Year || '-' || SUBSTR(Month, 1, 3), '-01', 'YYYY-MON-DD')
  ) AS Yearval
FROM ZXC
于 2012-05-23T07:28:12.447 に答える