2016-08-01 4 views
0

私はデータをピボットするOracle SQLクエリを持っています。私が抱えている問題は、ピボットされたデータ内の特定のレコードには、全体にわたってNULL値があるということです。私のクエリのようになり何かは、次のようにピボットSQLのNULL値をフィルタリングします

select product, type, month, sum(case when variable = 'LY' then value end) as "LY", 
    sum(case when variable = 'TY' then value end) as "TY", 
    sum(case when variable = 'NY' then value end) as "NY" 
    from tbl_sales 
group by 
product, type, month 

私のレコードは、その後、

Product type month LY  TY NY 
AA1  2  1  20  30 40 
AA2  4  1  30  50 60 
AA3  4  1  NULL NULL NULL 
AA4  3  1  NULL NULL NULL 

に見えるこの結果は、データのほんの一部であり、約15の合計の列を旋回しています。私が抱えている問題は、最後の2つのレコード(製品AA3とAA4と私はそれらの可能性があります。どのようにこれらのタイプのレコードをフィルタリングせずに各列または列の合計とフィルターの後に?

+0

私たちはより良い明確にすることができますので、テーブルの構造情報やデータを追加します。 –

+0

あなたのケースにelse条件を追加する式: 'then else else 0 end' – cha

+0

@Jason - また、' group by'が見つからない完全なクエリを投稿してください。 –

答えて

0

nullの値を持つレコードを削除することが必要な場合は、where value <> nullを追加します(ただし、この列に値がない場合でも、一部の列にはnullというレコードが記録されます)。 。)

あなたがnullではない別のデフォルト値を持っており、各列のcase whenでそれを指定しないようにしたい場合は、次のことができます。

select product, type, month, sum(case when variable = 'LY' then value end) as "LY", 
    sum(case when variable = 'TY' then value end) as "TY", 
    sum(case when variable = 'NY' then value end) as "NY" 
from (select product, type, month, variable, case when value is null then 0 else value end value from tbl_sales) 

(ただし、0はnullとしてそれを持つと同じのようなものであるとして、それを持つ)