表如下:id time_cycle area_id sub_area_id value
1 20110301 10 1001 13
2 20110301 10 1002 10
3 20110301 10 1003 12
4 20110301 20 2001 15
5 20110301 20 2002 11
6 20110302 10 1001 15
7 20110302 10 1002 12
8 20110302 10 1003 10
9 20110302 20 2001 20
10 20110302 20 2002 12
11 20110401 10 1001 11
12 20110401 10 1002 12
13 20110401 10 1003 13
14 20110401 20 2001 14
15 20110401 20 2002 15
16 20110402 10 1001 16
17 20110402 10 1002 17
18 20110402 10 1003 18
19 20110402 20 2001 19
20 20110402 20 2002 20希望出如下结果 area sub_erea 201103 201104
10 1001 28 27
1002 22 29
1003 22 31
total 72 81 20 2001 35 33
2002 23 35
total 58 68不知道是不是描述清楚了。有疑问请问。
可惜最高只能给100分。
1 20110301 10 1001 13
2 20110301 10 1002 10
3 20110301 10 1003 12
4 20110301 20 2001 15
5 20110301 20 2002 11
6 20110302 10 1001 15
7 20110302 10 1002 12
8 20110302 10 1003 10
9 20110302 20 2001 20
10 20110302 20 2002 12
11 20110401 10 1001 11
12 20110401 10 1002 12
13 20110401 10 1003 13
14 20110401 20 2001 14
15 20110401 20 2002 15
16 20110402 10 1001 16
17 20110402 10 1002 17
18 20110402 10 1003 18
19 20110402 20 2001 19
20 20110402 20 2002 20希望出如下结果 area sub_erea 201103 201104
10 1001 28 27
1002 22 29
1003 22 31
total 72 81 20 2001 35 33
2002 23 35
total 58 68不知道是不是描述清楚了。有疑问请问。
可惜最高只能给100分。
- 语句
select area_id, sub_area_id, sum(if(left(time_cycle, 6) = "201103", value, 0)) as "201103", sum(if(left(time_cycle, 6) = "201104", value, 0)) as "201104"
from test
group by area_id, sub_area_id
with rollup
- 结果:10 1001 28 27
10 1002 22 29
10 1003 22 31
10 72 87
20 2001 35 33
20 2002 23 35
20 58 68
130 155
+------+----------+--------+--------+
| area | sub_area | 201103 | 201104 |
+------+----------+--------+--------+
| 10 | 1001 | 28 | 27 |
| 10 | 1002 | 22 | 29 |
| 10 | 1003 | 22 | 31 |
| 10 | total | 72 | 87 |
| 20 | 2001 | 35 | 33 |
| 20 | 2002 | 23 | 35 |
| 20 | total | 58 | 68 |
| NULL | total | 130 | 155 |
+------+----------+--------+--------+
8 rows in set (0.00 sec)
的确可以实现我想要的功能
不过随着日期的增长,sql会需要每个月改一次?