2014-08-28 54 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

和封閉的這樣做。