SQLserver统计1-12月的数据,没有数据的月份显示为0

TABLE A

id   日期   项目经理   合同金额    回款金额

sql语句如何写?得到下面的表

月份    合同金额   回款金额

1月       ***           ****

2月       ***            ***

***       ******        ****

12月     ***           ***

用户X0519751 发布于 2021-5-21 11:46
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
Kevin-sLv7中级互助
发布于2021-5-21 11:51

大概这么写:先创一个表列含有12个月,然后再去跟TABLE A 做左连接即可,SELECT 月份(1-12个月) FROM 月份表 B LEFT JOIN TABLE A ON B.月份=A.月份

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-5-21 11:56(编辑于 2021-5-21 12:00)

if object_id('tb') is not null drop table tb 

go 

create table tb(id int identity(1,1),startDate varchar(10),endDate varchar(10)) 

insert into tb(startDate,endDate) select '2013-01-01','2013-12-01'

go 

declare @startDate varchar(10) 

declare @endDate varchar(10) 

select @startDate=startDate,@endDate=endDate from tb with(nolock) 

select convert(varchar(10),dateadd(mm,number,@startDate),120) as [月份] 

from master..spt_values with(nolock) 

where type='P' and number>=0 

and dateadd(mm,number,@startDate)<=@endDate 

go 

drop table tb 

go 

image.png

  • 用户X0519751 用户X0519751(提问者) 这是可以直接写到数据集里面,还是要先建立一个存储过程?
    2021-05-21 12:04 
  • Z4u3z1 Z4u3z1 回复 用户X0519751(提问者) 当做一般SQL语句用。把结果动作表A。然后 SELECT * FROM A LEFT JOIN 你的表 ON A.XX=B.XX
    2021-05-21 15:01 
最佳回答
0
liboyu420949524Lv5中级互助
发布于2021-5-21 13:25

单元格里面比如是a1,直接写一个函数向下扩展,range(1,12,1),然后把你数据集里面的月份拖过去,过滤一下数据集月份等于a1,父格也是a1就完事了

  • 4关注人数
  • 613浏览人数
  • 最后回答于:2021-5-21 13:25
    请选择关闭问题的原因
    确定 取消
    返回顶部