2016-12-27 6 views
0

私は2つのテーブルcardinfoとpaytbを持っています。私の声明では、私はCONT_IDによってそれらを結合しました。select case文追加情報

select (case when age_years >= 18 and age_years < 30 then '18-29' 
      when age_years < 50 then '30-49' 
      when age_years < 70 then '50-69' 
      when age_years < 100 then '70-100' 
      end) as age_range, 
      count(DISTINCT c.CONT_ID) as num, 
    CASE WHEN GENDER = '1' THEN 1 ELSE 0 END/COUNT(DISTINCT c.CONT_ID), 
    SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT)/COUNT(*) 'TOTAL-Amount Avg' 
     from cardinfo c 
     left join paytb t 
      on c.CONT_ID = t.CONT_ID 
     group by (case when age_years >= 18 and age_years < 30 then '18-29' 
     when age_years < 50 then '30-49' 
     when age_years < 70 then '50-69' 
     when age_years < 100 then '70-100' 
     end) 
     order by min(age_years);  

さて、これは最初の2列を示しています。

AGE_RANGE   NUM  GENDER  
---------+---------+---------------- 
18-29    828  50%   
30-49    2510  ??   
50-69    2014  ??   
70-100    649     

私は表からGENDERパラメータ(0または1)を追加したいが。

CASE WHEN GENDER = '1' THEN 1 ELSE 0 END/COUNT(DISTINCT c.CONT_ID) 

SQLCODE = -122

をそして私は、トランザクションの平均を見つけるためにしようと試みた:しかし、これは動作していない

SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT)/COUNT(*) 'TOTAL-Amount Avg' 

は、残念ながらこれは私にDECFLOATのエラーになります。
合計次のようになります。しかし、あなたはおそらく必要はありません

SUM(CASE WHEN GENDER = '1' THEN 1 ELSE 0 END)/COUNT(DISTINCT c.CONT_ID) 

SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) 
    -----+---------+---------+---------+ 
    +1.232071426000000000000000E+0007 
    +3.062581021000000000000000E+0007 
    +2.399951792000000000000000E+0007 
    +8.228919170000000000000000E+0006 

答えて

0

:それは必要ではない場合、あなたはこれを簡略化することができ

select age_range, 
     count(DISTINCT CONT_ID) as num, 
     CASE WHEN GENDER = '1' THEN 1 ELSE 0 END/COUNT(DISTINCT c.CONT_ID), 
     SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT)/COUNT(*) 'TOTAL-Amount Avg' 
from 
(
    select (case when age_years >= 18 and age_years < 30 then '18-29' 
       when age_years < 50 then '30-49' 
       when age_years < 70 then '50-69' 
       when age_years < 100 then '70-100' 
      end) as age_range, 
      c.CONT_ID, 
      GENDER, 
      ACAUREQ_AUREQ_TX_DT_TTLAMT 
    from CARDUSR.CLIENT_INFO c 
    left join cardusr.sppaytb t 
     on c.CONT_ID = t.CONT_ID 
) 
group by age_range, GENDER 
0

あなたはgroup bygenderを含めたり、集約関数に引数にする必要があるのいずれかCOUNT(DISTINCT)。私は、派生テーブルに元のクエリを包むだろういくつかのタイピング保存する

AVG(CASE WHEN GENDER = '1' THEN 1.0 ELSE 0 END) 
+0

働いた、私が持っていますこれに多くの列を追加する。最も頻繁なACAUREQ_AUREQ_ENV_M_CMONNM - (共通の商人名)と同様です。どのように見えるだろうか? – bastel

+0

@bastel。 。 。私はあなたが何を望んでいるのかはわかりませんが、 'SUM(CASE。。。)'と 'AVG(CASE。。。)'は共通の構造です。 –

関連する問題