0

これが私がこれまでに持っているものです...

SELECT pr.[name], SUM(COALESCE(qm.iscompleted,0)) count_yes,
  SUM(COALESCE(qm.iscompleted,1)) count_no,
   COUNT(p.id) AS tot
FROM   (aco.practices pr
      left JOIN aco.patients_practices ppr ON (ppr.practiceid = pr.id)
      left JOIN aco.patients p ON (p.id = ppr.patientid)
      LEFT JOIN aco.qmheader qm ON (qm.patientid = p.id AND qm.practiceid = pr.id)
)
WHERE  (pr.parentaco = 30982)
GROUP BY pr.[name]
ORDER BY pr.[name]

ここにいくつかの結果があります

名前count_yescount_notot
name1 0 1 0
name2 0 1 0
name3 0 273 273
name4 0 114 114

ほとんどの場合、それは正しいですが、必要なのは、totが0の場合にcount_noでSUMしないことだけです。

これを簡単に行う方法はありますか?

ありがとう。

4

2 に答える 2

2

select条項を次のように変更します。

SELECT pr.[name], 
       SUM(COALESCE(qm.iscompleted,0)) AS count_yes,
       (case when COUNT(p.id) > 0 then 
             SUM(COALESCE(qm.iscompleted,1))
        else
             0 end) AS count_no,
       COUNT(p.id) AS tot
于 2012-11-30T19:29:51.703 に答える
1

HAVING次の句を使用します。

SELECT pr.[name], SUM(COALESCE(qm.iscompleted,0)) count_yes,
  SUM(COALESCE(qm.iscompleted,1)) count_no,
   COUNT(p.id) AS tot
FROM   (aco.practices pr
      left JOIN aco.patients_practices ppr ON (ppr.practiceid = pr.id)
      left JOIN aco.patients p ON (p.id = ppr.patientid)
      LEFT JOIN aco.qmheader qm ON (qm.patientid = p.id AND qm.practiceid = pr.id)
)
WHERE  (pr.parentaco = 30982)
GROUP BY pr.[name]
HAVING COUNT(p.id) = 0
ORDER BY pr.[name]
于 2012-11-30T19:28:47.437 に答える