
这是典型的解决方案。使用case语句来分解不同的条件。如果一条记录满足,则得到1,否则得到0。然后
SUM对值执行a
SELECt SUM(active_count) active_count, SUM(overdue_count) overdue_count SUM(due_today_count) due_today_count FROM ( SELECt CASE WHEN jobs.status_id NOT IN (8,3,11) THEN 1 ELSE 0 END active_count, CASE WHEN jobs.due_date < '2011-06-14' AND jobs.status_id NOT IN(8,11,5,3) THEN 1 ELSE 0 END overdue_count, CASE WHEN jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000' THEN 1 ELSE 0 END due_today_count FROM "jobs" WHERe jobs.creator_id = 5 ) t
UPDATE如前所述,当0记录作为t返回时,此结果将作为所有值中Null的单个结果。您有三个选择
1)添加一个Haveing子句,以便您没有返回记录,而不是所有NULLS的结果
HAVINg SUM(active_count) is not null
2)如果您希望返回所有零,则可以对所有总和加总
例如
SELECT COALESCE(SUM(active_count)) active_count, COALESCE(SUM(overdue_count)) overdue_count COALESCE(SUM(due_today_count)) due_today_count
3)利用
COUNT(NULL) = 0sbarro所展示的事实。您应该注意,非空值可以是任何数字,而不必为1
例如
SELECT COUNT(CASE WHEN jobs.status_id NOT IN (8,3,11) THEN 'Manticores Rock' ELSE NULL END) as [active_count]
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)