我正在尝试在一个SQL查询中收集统计数据,以方便在联合中自动排序日期。它实际上只有一个表,但我想计算不同的数据情况。
我看到的表格如下:
ID In Wanted
441 2011-03-14 0
439 2011-03-14 1
442 2011-03-14 0
428 2011-03-13 1
431 2011-03-13 1
425 2011-03-11 0
423 2011-03-11 1
420 2011-03-09 1
我接近这个查询所需的结果:
SELECT * FROM
(
(SELECT date(In) n, count(date(In)) cntw, null cntl FROM items i WHERE Wanted=1 group by date(In))
union all
(SELECT date(In) n, null cntw, count(date(In)) cntl FROM items i WHERE Wanted=0 group by date(In))
) Serie
Order by n DESC
但是关闭不够接近:D我得到的结果是:
n cntw cntl
2011-03-14 null 2
2011-03-14 1 null
2011-03-13 2 null
2011-03-11 null 1
2011-03-11 1 null
2011-03-09 1 null
我想要的是按日期在同一行“混合”结果:
n cntw cntl
2011-03-14 1 2
2011-03-13 2 null
2011-03-11 1 1
2011-03-09 1 null
正如您所看到的,每个日期只有一行。 实际上最完美的结果就是在那里甚至还有丢失的日期:
n cntw cntl
2011-03-14 1 2
2011-03-13 2 null
2011-03-12 null null
2011-03-11 1 1
2011-03-10 null null
2011-03-09 1 null
......但我想这是不可能的。
谢谢!
答案 0 :(得分:3)
select date(In) as n,
sum(case when wanted = 1 then 1 else 0 end) as cntw,
sum(case when wanted = 0 then 1 else 0 end) as cntl
from items
group by date(In)
order by n desc
答案 1 :(得分:1)
你想加入他们,我想这会有用
SELECT * FROM
(SELECT date(In) n, count(date(In)) cntw, null cntl FROM items i WHERE Wanted=1 group by date(In)) as a
LEFT JOIN
(SELECT date(In) n, null cntw, count(date(In)) cntl FROM items i WHERE Wanted=0 group by date(In)) as b
ON a.n = b.n
Order by n DESC
但我认为这可以在一个查询中完成,也许这样吗?
CREATE TABLE #tmpFoo (
SomeDate datetime,
Wanted bit
)
INSERT INTO #tmpFoo VALUES ('2011-03-11', 0)
INSERT INTO #tmpFoo VALUES ('2011-03-11', 1)
INSERT INTO #tmpFoo VALUES ('2011-03-12', 0)
INSERT INTO #tmpFoo VALUES ('2011-03-12', 1)
INSERT INTO #tmpFoo VALUES ('2011-03-14', 0)
SELECT SomeDate n,
count(NULLIF(Wanted,0)) cntw,
count(NULLIF(Wanted,1)) cntl
FROM #tmpFoo i
GROUP BY SomeDate
答案 2 :(得分:1)
您使用LEFT JOIN
使用n
字段来获取您拥有内容的日期...然后您UNION
使用查询为您提供这些内容什么都没有(你上面给出的信息不允许我帮助查询这个问题:D)。