2017-03-15 9 views
0

1つのテーブルからすべてのIDを取得しようとしていますが、別のテーブルからトランザクションの数を取得しようとしています。そのトリックは、IDがトランザクションテーブルにリストされていない可能性があるということです。その場合、そのIDに対してクエリが0を返すようにします。 (私が悪いの書式をお詫び申し上げます)1つのテーブルからすべてを選択し、別のテーブルから数えてヌルを含む

ID Table 
ID 
1 
2 
3 

Trans Table 
ID Trans 
1  123 
1  234 
3  345 
3  456 
3  567 

Query results 
ID - Trans Count 
1  2 
2  0 
3  3 

私はこのコードを持っているが、それはちょうど私のために働いていないと私は理由を把握することはできません。

SELECT A.ID, COUNT (B.TRANS) AS CNT 
FROM A 
LEFT JOIN B 
ON A.ID = B.ID 
WHERE B.DTE BETWEEN '01-Mar-2017' AND '31-Mar-2017' AND 
     A.CURRENT_FLAG = 1 
GROUP BY A.ID 

答えて

2

left joinを使用して、最初のテーブルの上に条件がwhere句に行きます。第二のテーブル上の条件はon句に行く:

SELECT A.ID, COUNT (B.TRANS) AS CNT 
FROM A LEFT JOIN 
    B 
    ON A.ID = B.ID AND 
     B.DTE BETWEEN '01-Mar-2017' AND '31-Mar-2017' AND 
WHERE A.CURRENT_FLAG = 1 
GROUP BY A.ID; 
+0

これでした。ゴードンありがとう! – cww

0

そしてちょうどNVL関数は、このシナリオのために完璧に動作します0

に置き換える場合、値がnullの場合、私はチェックします。

SELECT A.ID, COUNT (NVL(B.TRANS,0)) AS CNT 
FROM A 
LEFT JOIN B 
ON A.ID = B.ID 
WHERE B.DTE BETWEEN '01-Mar-2017' AND '31-Mar-2017' AND A.CURRENT_FLAG = 1 
GROUP BY A.ID 
関連する問題