比如说我的表的结构
日期 金额
2010-04-04 50
2010-05-05 20
2010-05-06 50
2010-05-04 100
2010-05-20 -50
2010-03-02 580
2010-02-01 60
2010-01-08 20
查询后我要的结果是:
自然周 总额
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 10 //比如说9周有总额是10 那就显示10 没有数据就显示0
10 50
实在不知道怎么写 麻烦给个解决的SQL语句
高手解决的!! 在此小弟感谢万分
新建一个week表 week(id) 就是1-53
然后,采用连接查询。
[code="sql"]
SELECT week.id , IF(amount IS NULL , 0, amount)
FROM
(SELECT WEEKOFYEAR(时间) As perWeek ,SUM(数量) AS amount FROM 你的表 GROUP BY perWeek) indTable
RIGHT JOIN week on indTable.perWeek = week.id;[/code]
[code="sql"]select week,format(sum(money),2) as money from(select week(date,5) as week,money from test.incoming)a group by week[/code]
没补0,可以建一个周数的空表然后外连接再分组求和
试试:
[code="sql"]SELECT WEEKOFYEAR(日期) ,SUM(金额) FROM 你的表 GROUP BY WEEKOFYEAR(日期);[/code]
建立一个星期表, 记录是1到52
[code="java"]
Field Type
sale_date date
amount int
Field TypeComment
seq int
[/code]
[code="sql"]
SELECT a.seq, IFNULL(t.sum_amount,0)
FROM (
SELECT WEEKOFYEAR(sale_date) AS sale_week, SUM(amount) AS sum_amount
FROM saleamount
GROUP BY sale_week
) t RIGHT OUTER JOIN WEEK a
ON t.sale_week = a.seq
WHERE a.seq <= (SELECT MAX(WEEKOFYEAR(sale_date)) FROM saleamount)
[/code]
[code="sql"]SELECT WEEKOFYEAR(日期) ,SUM(金额) FROM 你的表 WHERE 日期 BETWEEN XXX AND YYY GROUP BY WEEKOFYEAR(日期);[/code]
XXX是起始日期
YYY是结束日期
[quote]这个不行的,这个只能查处有数据的日期,这周没有数据 他就差不出来,我要的是没有数据 这周还在 但是显示金额为0 [/quote]
那就另外建立一个表,是1-53吧。
myweek (周数 , 总量)
然后,用连接查询。
是语法错误?
between '2010-05-01' AND '2010-5-5' [color=blue][b]应该用引号的!![/b][/color]
改成,也可以:
WHERE 日期 > XXXX AND 日期 < YYYY
本来就没有列,如何查询出来列?
只有通过连接表,通过连接表来补充没有的列!
呵呵,鄙人不才,赐教!!