-1

いくつかの助けを借りて、pl sql developer でこれらのコマンドを取得しました。

 SELECT  CASE
    WHEN t.aaa BETWEEN 1 AND 5000000 THEN '01'
    WHEN t.aaa BETWEEN 5000001 AND 7000000 THEN '02'
    WHEN t.aaa BETWEEN 7000001 AND 10000000 THEN '03'
    WHEN t.aaa BETWEEN 10000001 AND 30000000 THEN '04'
    WHEN t.aaa BETWEEN 30000001 AND 50000000 THEN '05'
    ELSE '06' END T
,count(t.bbb), sum(t.aaa)
FROM t.ccc
WHERE t.ddd IN  ('3','4','5','6','D','E','F')
AND t.zzz like '60%'
GROUP BY CASE 
   WHEN t.aaa BETWEEN 1 AND 5000000 THEN '01' 
   WHEN t.aaa BETWEEN 5000001 AND 7000000 THEN '02' 
   WHEN t.aaa BETWEEN 7000001 AND 10000000 THEN '03'
   WHEN t.aaa BETWEEN 10000001 AND 30000000 THEN '04'
   WHEN t.aaa BETWEEN 30000001 AND 50000000 THEN '05'
   ELSE '06' END order by 1;

結果は次のとおりです。

   T    COUNT(T.bbb)    SUM(T.aaa)
   1       1019           5519981
   2       878            8620000
   3       2250           16499000
   4       6844           4638E+11
   5       6061           691E+11
   6       915            8452192

そのため、さまざまな行のカウントと合計がありました。今、さまざまな列に同じ行を含める方法を知りたいです。私は 1 つとすべての(さまざまな) を意味COUNT(T.bbb)します。SUM(T.aaa)t.zzzt.zzz

これらの結果の例は、行と 2 の同じ範囲に対するものですt.zzz

   T    COUNT(T.bbb)    SUM(T.aaa)   COUNT(T.bbb)     SUM(T.aaa)  
   1       1019          5519981       19             654321
   2       878           8620000       654            98765432
   3       2250          16499000      321            3454643
   4       6844          4638E+11      154            3213454
   5       6061          691E+11       2158           23132464
   6       915           8452192       145            341321321

t.bbbまた、量が「0」であってもすべての行が必要です。

4

1 に答える 1

1

何をしようとしているのかは明確ではありませんが、追加のフィルタリングを使用しcount()たいようです。sum()その場合は、次のようなcaseステートメントを使用できます。

SELECT  CASE
    WHEN t.aaa BETWEEN 1 AND 5000000 THEN '01'
    WHEN t.aaa BETWEEN 5000001 AND 7000000 THEN '02'
    WHEN t.aaa BETWEEN 7000001 AND 10000000 THEN '03'
    WHEN t.aaa BETWEEN 10000001 AND 30000000 THEN '04'
    WHEN t.aaa BETWEEN 30000001 AND 50000000 THEN '05'
    ELSE '06' END T,
  count(case when t.zzz like '60%' then t.bbb end) Count_BBB_60, 
  sum(case when t.zzz like '60%' then t.aaa end) Sum_AAA_60,
  count(case when t.zzz like '61%' then t.bbb end) Count_BBB_61,
  sum(case when t.zzz like '61%' then t.aaa end) Sum_AAA_61
FROM t.ccc
WHERE t.ddd IN  ('3','4','5','6','D','E','F')
GROUP BY CASE 
   WHEN t.aaa BETWEEN 1 AND 5000000 THEN '01' 
   WHEN t.aaa BETWEEN 5000001 AND 7000000 THEN '02' 
   WHEN t.aaa BETWEEN 7000001 AND 10000000 THEN '03'
   WHEN t.aaa BETWEEN 10000001 AND 30000000 THEN '04'
   WHEN t.aaa BETWEEN 30000001 AND 50000000 THEN '05'
   ELSE '06' END order by 1;
于 2012-12-26T14:15:08.763 に答える