0

ある列グループの値を別の列で合計したい。例えば

Month     Count
Jan         5
Jan         7
Feb         1
Feb         2

私が欲しい

Month     Count   Status
Jan         5       A
Jan         7       B
Jan        12      SUM
Feb         1       A
Feb         2       B
Feb         3      SUM
4

4 に答える 4

3

これを行う 1 つの方法は、 を使用することですrollup。ただし、元のデータが必要なため、このアプローチでは、ロールアップのために rownum による「偽の」集計を行います。

select Month, sum(Count),
       (case when rn is null then 'SUM' end) as status
from (select rownum as rn, t.*
      from t
     ) t
group by Month, rollup(rn)

ステータス列のAとの意味がわかりません。B

于 2013-08-28T11:47:04.320 に答える
1

元のテーブル:

CREATE TABLE test
(
    month CHAR(3), 
    num INT,
    status CHAR(3)
);

INSERT INTO test (month, num, status) VALUES
    ('Jan', 5, 'A'),
    ('Jan', 7, 'B'),
    ('Feb', 1, 'A'),
    ('Feb', 2, 'B');

クエリ:

SELECT month, sum(num) AS num, 'SUM' AS status
FROM test
GROUP BY month
UNION
SELECT month, num, status
FROM test
ORDER BY month DESC, status

結果:

MONTH   NUM   STATUS
Jan     5     A
Jan     7     B
Jan     12    SUM
Feb     1     A
Feb     2     B
Feb     3     SUM

これがSQLfiddleです。

于 2013-08-28T11:48:16.700 に答える
0

オラクルMODELには上記の句があります:テーブルに列のステータスがある場合は、簡単なクエリがあります:

モデル条項リンク Oracle ドキュメント:

SELECT month, count , status
FROM my_test2
MODEL
PARTITION BY (MONTH)
DIMENSION BY (status)
MEASURES(count)
RULES(COUNT['Sum'] = count['A']+ count['B'])
order by month desc, status;


MONTH                     COUNT STATUS             
-------------------- ---------- --------------------
Jan                           5 A                    
Jan                           7 B                    
Jan                          12 Sum                  
Feb                           1 A                    
Feb                           2 B                    
Feb                           3 Sum                  

 6 rows selected 
于 2013-09-24T07:58:52.010 に答える
0
select month, sum(count) from table group by rollup(month, count);

使用月がnullでない場合は、正味合計も表示されます。

于 2013-08-28T11:46:51.807 に答える