您可以使用CASE
語句時,你COUNT
:
SELECT task.date_created,
count(1) opened,
count(case when is_closed = 'true' then 1 end) closed
FROM task
GROUP BY task.date_created
ORDER BY task.date_created
SQL Fiddle Demo
考慮您的意見,這裏是用一對夫婦Common Table Expressions
的方法:
WITH OPENED AS (
SELECT date_created, count(1) opened
FROM task
GROUP BY date_created
) ,
CLOSED AS (
SELECT date_updated, count(1) closed
FROM task
WHERE is_closed = 'true'
GROUP BY date_updated
)
SELECT D.YourDateField, o.opened, c.closed
FROM YourDateTable D
LEFT JOIN Opened O ON D.YourDateField = O.Date_Created
LEFT JOIN CLosed C ON D.YourDateField = C.Date_Created
正如Gordon指出的那樣,FULL OUTER JOIN
也可以工作。我只是更喜歡使用日期表來播種。創建表格一次,並在需要的地方使用它。
您似乎錯過了'WHERE task.is_closed = 1'(假設'is_closed'類型爲'BIT') – 2013-04-29 18:38:25