2016-10-18 7 views
2

変化ヌル私はこのようなクエリがあります:条件SQLのSUM:0

WHERE a.c_kodedept = b.c_kodedept AND 
      a.c_kodediv = b.c_kodediv AND 
      a.c_kodegrp0 = b.c_kodegrp0 AND 
      (a.nilai is not null or b.nilai is not null) 
で、私はそれらのテーブルから選択したい

SELECT bgdepartemen.c_kodedept AS c_kodedept, 
     bgdepartemen.vc_namadept AS vc_namadept, 
     bgdivisi.c_kodediv AS c_kodediv, 
     bgdivisi.vc_namadiv AS vc_namadiv, 
     bggroup0.c_kodegrp0 AS c_kodegrp0, 
     bggroup0.vc_namagrp0 AS vc_namagrp0, 
     (SELECT COALESCE(SUM(bgrealisasi0.n_nilai)) 
     FROM (bgrealisasi0 JOIN bggroup1 ON bgrealisasi0.c_kodegrp1 = bggroup1.c_kodegrp1) 
     WHERE bgrealisasi0.n_tahun = 2016 AND 
     bgrealisasi0.n_bulan >= 2 AND 
     bgrealisasi0.n_bulan <= 3 AND 
     bgrealisasi0.c_kodediv = bgdivisi.c_kodediv AND 
     bggroup1.c_kodegrp0=bggroup0.c_kodegrp0 AND 
     bggroup1.c_kodegrp1 LIKE '%') AS nilai 
FROM bgdivisi JOIN bggroup0 ON 1 = 1 
JOIN bgdepartemen on bgdivisi.c_kodedept = bgdepartemen.c_kodedept 
WHERE bgdivisi.c_kodediv LIKE '%' AND 
     bgdepartemen.c_kodedept LIKE '%' AND 
     bggroup0.c_kodegrp0 LIKE '%' 

:このような

SELECT bgdepartemen.c_kodedept AS c_kodedept, 
     bgdepartemen.vc_namadept AS vc_namadept, 
     bgdivisi.c_kodediv AS c_kodediv, 
     bgdivisi.vc_namadiv AS vc_namadiv, 
     bggroup0.c_kodegrp0 AS c_kodegrp0, 
     bggroup0.vc_namagrp0 AS vc_namagrp0, 
     (SELECT COALESCE(SUM(bgbudget0.n_nilai)) 
     FROM (bgbudget0 JOIN bggroup1 ON bgbudget0.c_kodegrp1 = bggroup1.c_kodegrp1) 
     WHERE bgbudget0.n_tahun = 2016 AND 
       bgbudget0.n_bulan >= 2 AND 
       bgbudget0.n_bulan <= 3 AND 
       bgbudget0.c_kodediv = bgdivisi.c_kodediv AND 
       bggroup1.c_kodegrp0 = bggroup0.c_kodegrp0 AND 
       bggroup1.c_kodegrp1 LIKE '%') AS nilai 
FROM bgdivisi JOIN bggroup0 ON 1 = 1 
JOIN bgdepartemen on bgdivisi.c_kodedept = bgdepartemen.c_kodedept 
WHERE bgdivisi.c_kodediv LIKE '%' AND 
    bgdepartemen.c_kodedept LIKE '%' AND 
    bggroup0.c_kodegrp0 LIKE '%' 

し、別の

でも、0で表示されるnullレコードを変更したいのですが、COALESCEを試しましたが、それでも正しい結果が得られません。

+0

私はあなたの質問を理解していません。 "a"とは何ですか? "b"とは何ですか?あなたは 'NULL'値を避ける方法を理解しているようです。 –

+0

ISNULL(columnName、0)を試してください – Doraemon

答えて

4

を使用する必要があります0、次にSUM

SELECT SUM(COALESCE(bgrealisasi0.n_nilai, 0)) ... 

そうでなければ、field LIKE '%'のようないくつかの欠点があり、それは実際には非効率的な方法であるfield IS NOT NULLを書いています。スカラーサブクエリを使用すると、クエリ全体が実際には読みにくくなり、代わりにサブクエリとして書き直すと、結合が最適化される可能性があります。

-1

本当にいただきました!あなたの質問を理解していますが0にnull値を変更したい場合は、以下のクエリを参照することができない:

ISNULL(SUM(column_name), 0) 
+1

'ISNULL'はPostgresqlの関数ではありません – Patrick

1

あなたは一般的には、あなたが最初にNULL値を設定します

SELECT COALESCE(SUM(bgbudget0.n_nilai), 0) 
FROM ..... 
SELECT COALESCE(SUM(bgrealisasi0.n_nilai), 0) 
FROM ....