cww
cww

Reputation: 5

Select all from one table and count from another and include nulls

I'm trying to get all ids from one table and a count of transactions from another table. The trick is that an id may not be listed in the transaction table. In that case, I want the query to return 0 for that id. (I apologize for the bad formatting)

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

I have this code, but it just isn't working for me and I can't figure out why.

  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

Upvotes: 0

Views: 52

Answers (2)

Jose Martinez
Jose Martinez

Reputation: 1

I would check if the value is null if then just replace it with a 0

The NVL Function will work perfect for this scenario.

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

Upvotes: 0

Gordon Linoff
Gordon Linoff

Reputation: 1269973

When using left join, conditions on the first table go in the where clause. Conditions on the second table go in the on clause:

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;

Upvotes: 2

Related Questions