2014-08-28 74 views
0

我有一个表(tbl)与3个字段:id,日期和状态。从表样品信息可能如下:复杂SQLite加入

id date status 
1 8-20 open 
2 8-20 open 
3 8-20 closed 
4 8-21 closed 
5 8-22 open 
6 8-23 open 
7 8-24 closed 

我想写如下返回数据的查询:

date open closed 
8-20 2 1 
8-21 0 1 
8-22 1 0 
8-23 1 0 
8-24 0 1 

我似乎可以得到的是包装2个联合在一起选择在最接近另一种选择,像这样:

select date from (
select date, count(id) from tbl where status = 'open' group by date 
union 
select date, count(id) from tbl where status = 'closed' group by date) 
group by date 

我认为这将涉及到全外连接,如果它不是SQLite的,以帐户为天,其中一种状态有0项,但我不知道我竟被如何d构造两个左连接以获得期望的结果。

回答

0

你可以使用相关子查询此:

SELECT date, 
     (SELECT COUNT(*) 
     FROM tbl AS t2 
     WHERE t2.date = tbl.date 
     AND status = 'open' 
     ) AS open, 
     (SELECT COUNT(*) 
     FROM tbl AS t2 
     WHERE t2.date = tbl.date 
     AND status = 'closed' 
     ) AS closed 
FROM tbl 

另外,通过日期组,并计算该组中有多少行具有所期望的状态:

SELECT date, 
     total(status = 'open') AS open, 
     total(status = 'closed') AS closed 
FROM tbl 
GROUP BY date 
+0

第二个查询拉数据正确。谢谢! – MLEV 2014-08-29 13:30:56

1

运行以下查询:

select date, sum(case when status ='open' then 1 else 0 end) as open from test group by date 

sqlfiddle.com/#!2/f0c533/4

和封闭的这样做。