2016-12-09 1 views
-1

特定のバッチタイプを除いた期間あたりのコードあたりの総量を要約するスクリプトを作成しようとしています。sql sum caseが要約されていません

スクリプトは実行されますが、コードごとのデータは要約されません。私は間違って何をしていますか?

また、スクリプトを書く良い方法がある場合は、フィードバックを歓迎します。私はあなたがGROUP BY句でdet_nett列を必要としないと思う

おかげ

SELECT 
(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then det_nominalcr 
    when DET_ledger = 'NL' and det_nominalcr = '' then det_nominaldr 
    else det_analysis 
    end) as Code, 
DET_YEAR, 
DET_PERIODNUMBR, 
sum(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then -1* det_nett 
    when DET_ledger = 'PL' and det_type = 'CRN' then -1* det_nett 
     else det_nett 
    end) as Net 
FROM SL_PL_NL_DETAIL 
where det_year = 'C' 
and det_periodnumbr = '07' 
and (det_nominalcr like '617%' or det_nominaldr like '617%') 
and det_primary not in 
    (select det_primary 
    from sl_pl_nl_detail 
    where det_ledger in ('PL','SL') 
    and det_batch_flag = 1) 
group by det_nominaldr, det_nominalcr, det_nett, det_ledger, det_year, det_periodnumbr, det_analysis, det_type 
+0

あなただけの 'SELECT *'と 'GROUP BY'をスキップしない場合、結果は罰金見えますか? – jarlh

+0

合計を除外すると、正しいデータが返されます。しかし、今年はデータベースに約1mの翻訳が含まれているため、データを要約する必要があります。 – Monty

答えて

0

が、これはOracleのある場合には、この

 SELECT 
(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then det_nominalcr 
    when DET_ledger = 'NL' and det_nominalcr = '' then det_nominaldr 
    else det_analysis 
    end) as Code, 
DET_YEAR, 
DET_PERIODNUMBR, 
sum(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then -1* det_nett 
    when DET_ledger = 'PL' and det_type = 'CRN' then -1* det_nett 
     else det_nett 
    end) as Net 
FROM SL_PL_NL_DETAIL 
where det_year = 'C' 
and det_periodnumbr = '07' 
and (det_nominalcr like '617%' or det_nominaldr like '617%') 
and det_primary not in 
    (select det_primary 
    from sl_pl_nl_detail 
    where det_ledger in ('PL','SL') 
    and det_batch_flag = 1) 
group by det_nominaldr, det_nominalcr, det_ledger, det_year, 
     det_periodnumbr, det_analysis, det_type 
+0

こんにちは。残念ながらdet_nettを削除すると、結果の合計にすべてのデータが含まれているわけではありません。 – Monty

+0

しかし、あなたは列を合計し、それをグループに含めていますが、どちらも間違っているようです – Madhivanan

0

を試してみてください、あなたはあなたのDBMSを指定していなかったので、(これを試してみてくださいoracleでは、グループでのケースを簡単に言及できます。他のデータベースについてはわかりません):

SELECT 
(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then det_nominalcr 
    when DET_ledger = 'NL' and det_nominalcr = '' then det_nominaldr 
    else det_analysis 
    end) as Code, 
DET_YEAR, 
DET_PERIODNUMBR, 
sum(CASE 
    when DET_ledger = 'NL' and det_nominaldr = '' then -1* det_nett 
    when DET_ledger = 'PL' and det_type = 'CRN' then -1* det_nett 
     else det_nett 
    end) as Net 
FROM SL_PL_NL_DETAIL 
where det_year = 'C' 
and det_periodnumbr = '07' 
and (det_nominalcr like '617%' or det_nominaldr like '617%') 
and det_primary not in 
    (select det_primary 
    from sl_pl_nl_detail 
    where det_ledger in ('PL','SL') 
    and det_batch_flag = 1) 
group by CASE when DET_ledger = 'NL' and det_nominaldr = '' then det_nominalcr 
       when DET_ledger = 'NL' and det_nominalcr = '' then det_nominaldr 
       else det_analysis end, 
     DET_YEAR, 
     DET_PERIODNUMBR 
+0

申し訳ありません - これはアクセス次元データベース – Monty

+0

を使用しています。解決策は、派生テーブルを使用することです(私の答えを参照してください) – jarlh

0

派生テーブルにあなたの元のクエリをラップすることにより、いくつかのタイピングを保存し、GROUP BYその結果:

select Code, DET_YEAR, DET_PERIODNUMBR, SUM(Net) 
FROM 
(
    SELECT (CASE 
      when DET_ledger = 'NL' and det_nominaldr = '' then det_nominalcr 
      when DET_ledger = 'NL' and det_nominalcr = '' then det_nominaldr 
      else det_analysis 
      end) as Code, 
      DET_YEAR, 
      DET_PERIODNUMBR, 
      (CASE 
      when DET_ledger = 'NL' and det_nominaldr = '' then -1* det_nett 
      when DET_ledger = 'PL' and det_type = 'CRN' then -1* det_nett 
      else det_nett 
      end) as Net 
    FROM SL_PL_NL_DETAIL 
    where det_year = 'C' 
     and det_periodnumbr = '07' 
     and (det_nominalcr like '617%' or det_nominaldr like '617%') 
     and det_primary not in 
     (select det_primary 
     from sl_pl_nl_detail 
     where det_ledger in ('PL','SL') 
     and det_batch_flag = 1) 
) dt 
group by Code, DET_YEAR, DET_PERIODNUMBR 
+0

スター - ありがとう! – Monty

関連する問題