这是表。
SELECT MONTH(CREATE_TIME) AS m,COUNT(*),REMARK FROM dept AS d
WHERE YEAR(CREATE_TIME)=2016 AND REMARK = 2 OR REMARK
GROUP BY MONTH(CREATE_TIME)
这是SQL
这是结果。我想要没有数据的月份显示为0
例如上面的结果8,9,12月没有数据。就显示为8 0,9 0, 12 0
如果我是你用数据库解决不了 我会用后台代码来把它解决
SELECT K1.m,COUNT(*) ,K2.REMARK from
(SELECT MONTH(CREATE_TIME) AS m, REMARK FROM dept AS d
WHERE YEAR(CREATE_TIME)=2016
GROUP BY REMARK) K1
LEFT JOIN
(SELECT MONTH(CREATE_TIME) AS m,COUNT(*),REMARK FROM dept AS d
WHERE YEAR(CREATE_TIME)=2016 AND REMARK = 2
GROUP BY MONTH(CREATE_TIME)) K2
ON K1.REMARK=A2.REMARK
WHERE 1=1
GROUP BY K1.m
这个试试,我没数据表,纯属按思路写的.错了勿怪
代码解决比SQL解决更好,按月统计的数据本身数量就少,查询出来代码校验一下把缺少的加上多少,通过SQL解决还占用数据库的资源。
create table #tt(Mon varchar(2),m int,temp int)
declare @Month int
set @month=1
while @month<13
begin
declare @m int,@temp int
SELECT @m=MONTH(CREATE_TIME),@temp= count(*) FROM dept
WHERE YEAR(CREATE_TIME)=2019
and MONTH(CREATE_TIME)=@month
group by MONTH(CREATE_TIME)
insert into #tt values (@month,@m,@temp)
set @month=@month+1
set @m=null
set @temp=null
end
select * from #tt
drop table #tt