3

customer私の SQL CE データベースには、listとの3 つのテーブルがありcustomerlistます。customerlist

現在そのリストを購読している顧客の数も含めて現在のすべてのリストを表示するクエリを実行しようとしています (customerlistテーブルから数えます)。

これが私の現在のクエリです:

select list.listid, count(customerlist.customerid) as numppl, list.ShortDesc
from list inner join customerlist on list.listid=customerlist.listid
group by list.ShortDesc, list.listid
order by numppl desc

このデータベースの現在の構造は次のとおりです。

[Customer]           [List]             [CustomerList]
CustomerId           ListId             CustomerListId
Name                 ShortDesc          CustomerId
Other details                           ListId

これは現在、顧客が現在割り当てられているすべてのリストを返しますが、空のリストは返しません。空のリストは非表示になります。

空のリストも表示するようにこのクエリを変更したいのですが、苦労しています。私の望ましい出力は次のとおりです。

Name      numppl
listA     375
listB     45
listC     0

(上記の例では、listC は現在返されていません)。

クエリで listC も表示する方法について何か考えはありますか?

4

2 に答える 2

2

LEFT JOIN代わりに withを使用して、0ISNULLに置き換えます。NULL

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 フィドルのデモ


アップデート

SQL Server CE の場合は、次を試してください。

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;
于 2013-02-20T09:58:35.903 に答える
0

LEFT JOIN構文を使用する必要があります。

select list.listid,  case when count(customerlist.customerid) is null then 0 else count(customerlist.customerid) 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

または、 RIGHT JOINを使用できます。

select list.listid, case when count(customerlist.customerid) is null then 0 else count(customerlist.customerid) end as numppl, list.ShortDesc
from customerlist right join list on customerlist.listid=list.listid
group by list.ShortDesc, list.listid
order by numppl desc

COALESCE を使用します。

select list.listid,  coalesce(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
于 2013-02-20T10:00:00.407 に答える