现有一个订单表,内容很简单ID Name Date
1 Cup 2007-1-1
2 Glasses 2007-4-15
3 Sock 2007-6-1我想根据一条SQL,得到一年12个月的记录数,并不是光这三个月的,而是
2007-1 1
2007-2 0
2007-3 0
2007-4 1
2007-5 0
2007-6 1
2007-... 0
2007-12 0有什么方法实现吗?或有什么好的思路,我知道如果有一个空的月份表,可以实现用left join左联实现,其它的就不知道了
数据库 Mysql 5
1 Cup 2007-1-1
2 Glasses 2007-4-15
3 Sock 2007-6-1我想根据一条SQL,得到一年12个月的记录数,并不是光这三个月的,而是
2007-1 1
2007-2 0
2007-3 0
2007-4 1
2007-5 0
2007-6 1
2007-... 0
2007-12 0有什么方法实现吗?或有什么好的思路,我知道如果有一个空的月份表,可以实现用left join左联实现,其它的就不知道了
数据库 Mysql 5
SELECT TT.[MONTH],ISNULL(SS.COUNT(1),0) AS COU
FROM
(
SELECT CONVERT(VARCHAR(7),DATEADD(MONTH,ID,'2007-01-01'),120) AS [MONTH]
FROM
(SELECT TOP 12 ID = (SELECT COUNT(1) FROM SYSOBJECTS WHERE ID < A.ID)
FROM SYSOBJECTS A
)T
)TT LEFT JOIN 订单表 SS ON TT.[MONTH] = CONVERT(VARCHAR(7),SS.DATE,120)
GROUP BY TT.[MONTH]
订单表..其实lz的方法可行就行啦,加个参照表就可以解决多好啊,为什么非要在一条语句里实现.
FROM SYSOBJECTS A这种语法,可以取出 1-12 这12个数,但mysql没有,还要再建个表,我就是不想建表通过子查询什么的查出来,呵呵,不知道还没有有好办法,现在我会先建个参照表,然后用二楼的方法实现
然后再统计,如下例统计每月出现的人名的次数.
select count(a.username) ,a.date
from (
select username,substr(date,1,7) date
from mytest ) a
group by a.datemysql5.0.27版本测试OK