2012-03-06 37 views
0

我有如下表: 日期,小时,事故如何使用拆分列到多个值另一个

我得事故数量在白天和黑夜。

这里是如何得到它一天

选择日期,SUM(事故)AS '在天' 从车上其中date> ='2012-01-01 'AND DATE < =' 2012- 01-31' 和小时> = 00:00:00“和小时< =“11:59:59” GRUUP BY日期

如何修改查询,也有在晚上的事故?

回答

0

我在这里打招呼,但;

SELECT date,SUM(CASE WHEN HOUR>='00: 00:00' AND HOUR<=' 11:59:59 
THEN accidents ELSE 0 END) 
AS 'at day', 
SUM(CASE WHEN HOUR>='12: 00:00' AND HOUR<=' 23:59:59 
THEN accidents ELSE 0 END) AS 'at night' 
FROM vehicles 
WHERE DATE>='2012-01-01 'AND DATE<='2012-01-31' 
GROUP BY date 
+0

谢谢,作品gr8! – breq 2012-03-06 09:21:47

0

你可以使用一个union

SELECT date, SUM(accidents) AS 'at day', '' as 'at night' 
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
AND HOUR>='00: 00:00' AND HOUR<=' 11:59:59 ' 
GROUP BY date 
union 
SELECT date, '', as 'at day', SUM(accidents) AS 'at night' 
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
AND HOUR>='12: 00:00' AND HOUR<=' 23:59:59 ' 
GROUP BY date 

或使用case

SELECT date, '', as 'at day', 
     SUM(accidents) AS 'sum_accidents', 
     case `HOUR` between '00: 00:00' and '11:59:59' THEN 'night' ELSE 'day' END as 'night_or_day' 
FROM vehicles 
WHERE DATE>='2012-01-01 ' AND DATE<='2012-01-31' 
GROUP BY date 
+0

嘿,谢谢,它的工作原理! (第一个解决方案),但我怎么能在第一行中得到这个空的空间? http://screenshooter.net/0562655/06_03_2012__09_14_41并得到它像这样http://screenshooter.net/0562655/06_03_2012__09_17_38?我尝试了UNION ALL,但它不起作用 – breq 2012-03-06 08:14:58

+0

如果您使用第二种解决方案,您将在一列中加上一个额外的列,指示它是在白天还是在晚上 – 2012-03-06 08:23:33

0

在夜间和在天的意思是整天,所以才删除小时条件

SELECT date, SUM(accidents) AS 'at day' FROM vehicles WHERE DATE>='2012-01-01 'AND DATE<='2012-01-31' GRUUP BY date 
0

你可以省略HOUR上的WHERE条件和GROUP BY

SELECT date, 
     IF(HOUR BETWEEN '00:00:00' AND '11:59:59','day','night') as period, 
     SUM(accidents) as numAccidents 
FROM vehicles 
WHERE Date >= '2012-01-01' AND DATE <= '2012-01-31' 
GROUP BY Date, IF(HOUR BETWEEN '00:00:00' AND '11:59:59','day','night') 

此计算“夜”或使用IF(condition,then,else)结构“天”(注意:根据您的时间列的类型,你可能必须使用​​而不是BETWEEN)。

然后,它会根据日期和日/夜进行分组,以获得每天和周期的总和。