が列

2017-08-02 5 views
0

に行を変換することにより、サブクエリ内の集約関数を実行する必要がありここで入力テーブルです:ここでは「優秀」アカウントが列

accountnumber year quarter catgeory owedamt payedamt writeoffamt 
101   2001  1  Tax   130.0  0.0   30.0 
101   2001  1  Interest 130.0  30.0  30.0 
101   2001  2  Interest 120.0  20.0  20.0 
102   2002  1  Interest 120.0  100.0  20.0 
102   2002  2  Tax   110.0  100.0  10.0 

出力

accountnumber year quarter Tax (outstanding)  Interest (outstanding) 
101   2001  1   100.0      70.0 
101   2001  2   0.0      80.0 
102   2002  2   10.0      0.0 

は(合計に基づいてcaluclatedさOWED_AMT - (PAID_AMT + WRITEOFF_AMT))卓越した数値

注:税金と利息として列を持つ必要がありますが、これらの列の金額はt彼は上記の式に基づいています。

注2:accountntumberため: - である((PAID_AMT + WRITEOFF_AMT)OWED_AMT)(120-(100 + 20))= 0.0

しかし102、(未処理)利息は
和を算出します出力は0.0

を得たので、その年のいずれかの税カテゴリと四半期を持っている私たちは同じ年、同じ四半期にゼロとして(優れた)税及び利息(発行済)の両方を持っている場合、我々は

その行をスキップすることができますいけません

私が使用しているクエリは:

私はここで取得しています
with summaryData (accountnumber , 
      year , 
      quarter, tax, interest) as 
(
    SELECT accountnumber , 
      year , 
      quarter , 
      SUM(CASE WHEN catgeory = 'Tax' THEN sum(OWED_AMT - (PAID_AMT + WRITEOFF_AMT)) 
        ELSE 0 
       END), 
      SUM(CASE WHEN catgeory = 'Interest' THEN sum(OWED_AMT - (PAID_AMT + WRITEOFF_AMT)) 
        ELSE 0 
       END) 
    FROM acccount 
    GROUP BY accountnumber , 
      year , 
      quarter 
) 
select * from summaryData 
where tax > 0 or interest > 0; 

エラーは次のとおりです。あなたは、CTEでネストされた集計を

Cannot perform an aggregate function on an expression containing an aggregate or a subquery. 

答えて

2

必要はありません。したがって:

with summaryData (accountnumber, year, quarter, tax, interest) as (
     SELECT accountnumber, year, quarter, 
      SUM(CASE WHEN catgeory = 'Tax' THEN OWED_AMT - (PAID_AMT + WRITEOFF_AMT) 
         ELSE 0 
       END), 
      SUM(CASE WHEN catgeory = 'Interest' THEN OWED_AMT - (PAID_AMT + WRITEOFF_AMT) 
         ELSE 0 
       END) 
     FROM acccount 
     GROUP BY accountnumber, year, quarter 
    )