SQL Joining by field that *may* be empty

后端 未结 2 1040
滥情空心
滥情空心 2021-01-23 04:59

In my SQL CE database I have three tables: customer, list and customerlist (a junction table between customer and list<

2条回答
  •  北海茫月
    2021-01-23 05:39

    Use LEFT JOIN instead with ISNULL to replace NULL with 0:

    SELECT 
      list.listid, 
      ISNULL(count(customerlist.customerid), 0) AS numppl, 
      list.ShortDesc
    FROM list 
    LEFT JOIN customerlist ON list.listid = customerlist.listid
    GROUP BY list.ShortDesc, 
             list.listid
    ORDER BY numppl DESC;
    

    SQL Fiddle Demo


    Update

    For SQL Server CE, try this:

    SELECT 
      list.listid, 
      SUM(CASE WHEN customerlist.customerid IS NULL THEN 0 ELSE 1 END) AS numppl, 
      list.ShortDesc
    FROM list 
    LEFT JOIN customerlist ON list.listid = customerlist.listid
    GROUP BY list.ShortDesc, 
             list.listid
    ORDER BY numppl DESC;
    

提交回复
热议问题