SQLSUM无数据时默认为空

微信图片_20230110114131.png

select tb.md,tb.mdmc,ta.rq,ta.xingqi,ta.tianqi,ta.liuru,tb.xsbs,tb.xszje from

(SELECT md,rq

      ,xingqi

      ,tianqi

      ,liuru

      ,liuchu

      from keliu

  where rq>='2022-4-1'

  and   rq<='2022-4-30' 

  

    )ta 

  join 

  (select md,mdmc,rq,isnull(sum(xszje),0) xszje,isnull(sum(xsbs),0)xsbs from sale_daily where rq>='2022-4-1'

  and   rq<='2022-4-30'

  

  

    group by md,mdmc,rq  ) tb on ta.md=tb.md and ta.rq=tb.rq

  order by rq

请教个问题,按客流关联销售表,现在有个问题,如果有一天销售没有数据,没记录,怎么默认当天为0.我用ISNULL 好像没用,请指教,感谢。

SQL ysbin 发布于 2023-1-10 11:45
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-1-10 11:46(编辑于 2023-1-10 12:45)

SUM(ISNULL(XSZJE,0))

image.png

----------

declare @date datetime 

set @date='2013-08-31'

select convert(char(7),@date,120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1] 

,ltrim(year(@date))+right(100+month(@date),2)+right('0'+ltrim(number),2) as [日期格式2] 

from master..spt_values with(nolock) 

where type='P' and number>=1 

--and number<=datediff(dd,@date,dateadd(mm,1,@date)) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天 

and number<=datediff(dd,convert(char(7),@date,120)+'-01',convert(char(7),dateadd(mm,1,@date),120)+'-01')

image.png

--------------------

select tb.md,tb.mdmc,ta.rq,ta.xingqi,ta.tianqi,ta.liuru,isnull(tb.xsbs,0) [xsbs],isnull(tb.xszje,0) [xszje] from

(SELECT md,rq

      ,xingqi

      ,tianqi

      ,liuru

      ,liuchu

      from keliu

  where rq>='2022-4-1'

  and   rq<='2022-4-30' 

    )ta 

  left join 

  (select md,mdmc,rq,sum(isnull(xszje,0)) xszje,sum(isnull(xsbs,0))xsbs from sale_daily where rq>='2022-4-1'

  and   rq<='2022-4-30'

  

  

    group by md,mdmc,rq  ) tb on ta.md=tb.md and ta.rq=tb.rq

  order by rq

  • ysbin ysbin(提问者) 如果有一天没有记录,取不出数据
    2023-01-10 11:52 
  • ysbin ysbin(提问者) select md,mdmc,rq,sum(isnull(xszje,0)) xszje,sum(isnull(xsbs,0)) xsbs from sale_daily where rq>=\'2022-4-1\' and rq<=\'2022-4-30\' and md=\'YS01\' group by md,mdmc,rq order by rq
    2023-01-10 11:53 
  • Z4u3z1 Z4u3z1 回复 ysbin(提问者) 你的 join 应该指定left还是right(如果左表日期全就left,如果右表日期全就right),不指定默认是inner join
    2023-01-10 11:56 
  • ysbin ysbin(提问者) 回复 Z4u3z1 嗯,现在是就上面这一行,没有记录的那一天没显示出来,没有显示0
    2023-01-10 11:57 
  • Z4u3z1 Z4u3z1 回复 ysbin(提问者) 如果你2张表日期都不全 可以参考上面补充的SQL生成一张日期遍历表
    2023-01-10 12:03 
最佳回答
0
七夜Lv6初级互助
发布于2023-1-10 11:59

你需要有一个日期表,数据表左关联这个日期表,就会显示出所有日期的记录了,没有数据的自然就是空

最佳回答
0
就TM你叫夏洛啊Lv6中级互助
发布于2023-1-10 13:40

你需要一个日期字典表(网上一堆),以这个做主表关联,没数据用ifnull()函数,不用数据库类型函数可能不一样

  • 3关注人数
  • 460浏览人数
  • 最后回答于:2023-1-10 13:40
    请选择关闭问题的原因
    确定 取消
    返回顶部