2016-11-04 9 views
0

を返さない場合、私は次のクエリがありますゼロは値が

このクエリを実行する
SELECT 
    f.name, 
    COUNT(distinct(p.id)) 
FROM 
    problems p INNER JOIN problem_list pl on p.problem_list_id = pl.id 
    FULL OUTER JOIN facilities f on f.id = p.facility 
WHERE 
    p.problem_list_id = '100' 
    AND f.name in ('CRJ','TVRJ','WRJ') 
GROUP BY 
    f.name 
ORDER BY 
    f.name 

、時々facilitiesの一つは結果を返しませんが。その場合は、私はまだ私の結果は、その施設を示すが、例えば0

返すように設定したい:私は​​3210を使用しようとした

CRJ  |   0| 
TVRJ  |   12| 
WRJ  |   2| 

を、そして私を調整することに加入しますfacilityテーブルですが、動作していないようです。

+0

の可能性のある重複した[COUNTの集計に "ゼロ"/"0" の結果を含める方法?](http://stackoverflow.com/questions/14793057/how-to-include-zero-0-results -in-count-aggregate) –

答えて

3

私はFULL JOINが、必要であるとは思わないだけLEFT JOIN:あなたはおそらく開始する問題を持っていなかった施設を含めたい場合は

SELECT 
    f.name, 
    ISNULL(COUNT(DISTINCT p.id),0) N 
FROM 
    facilities f 
    LEFT JOIN (SELECT * 
       FROM problems 
       WHERE problem_list_id = '100') p 
     ON f.id = p.facility 
    LEFT JOIN problem_list pl 
     ON p.problem_list_id = pl.id 
WHERE 
    f.name in ('CRJ','TVRJ','WRJ') 
GROUP BY 
    f.name 
ORDER BY 
    f.name; 
+0

組み込みクエリが必要な理由は何ですか? –

+2

@FrumRollこれは、そのフィルタを結合条件として使用するのとまったく同じです。私はそれを書くこの方法が好きです。なぜなら、私がいくつかの行をフィルタリングしていることが(私にとっては)はっきりしているからです – Lamak

1

あなたの元のクエリは、問題を開始施設を備えています。

SELECT f.name, ISNULL(COUNT(DISTINCT p.id), 0) 
FROM facilities f 
LEFT JOIN problems p ON p.facility = f.id AND p.problem_list_id = '100' 
LEFT JOIN problem_list pl ON pl.id = p.problem_list_id 
WHERE f.name in ('CRJ', 'TVRJ', 'WRJ') 
GROUP BY f.name 
ORDER BY f.name 
関連する問題