sql问题

D}UG}JHEM4YDM4YYK$}QLLN.png,,如图所示在11月中部分日期是有交易数据的,但是现在需要展示当月所有天数,没有交易数据的日期就为null或者0,sql应该怎么写

Zwzz 发布于 2021-12-3 10:00
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
北纬六十六度Lv4初级互助
发布于2021-12-3 10:01(编辑于 2021-12-3 10:11)

新建一个表带上所有日期,新表 left join 这个表

image.png

  • Zwzz Zwzz(提问者) 可以不建表实现吗,客户那边不让建
    2021-12-03 10:06 
  • 北纬六十六度 北纬六十六度 回复 Zwzz(提问者) create 临时表也不行么
    2021-12-03 10:07 
  • 北纬六十六度 北纬六十六度 回复 Zwzz(提问者) 哈找到了,去百度了一下,直接获取当月所有天 SELECT CONVERT(VARCHAR(10), DATEADD(dd, number,CONVERT(VARCHAR(8), GETDATE(), 120)+ \'01\'), 120) AS dt FROM master..spt_values WHERE type = \'P\'AND DATEADD(dd, number,CONVERT(VARCHAR(8), GETDATE(), 120)+ \'01\') <= DATEADD(dd, -1,CONVERT(VARCHAR(8), DATEADD(mm,1, GETDATE()), 120)+ \'01\');
    2021-12-03 10:11 
  • Zwzz Zwzz(提问者) 回复 北纬六十六度 我去试试
    2021-12-03 10:14 
  • 北纬六十六度 北纬六十六度 回复 Zwzz(提问者) https://www.cnblogs.com/jpfss/p/11131335.html mysql的
    2021-12-03 10:17 
最佳回答
0
LTC朝Lv6高级互助
发布于2021-12-3 10:01(编辑于 2021-12-3 10:14)

这个在设计器中比较简单,根据月份将月份天数进行扩展,然后利用过滤条件进行匹配

image.png

  • Zwzz Zwzz(提问者) 我在设计器里用range实现了当月天数扩展,但是过滤匹配不上
    2021-12-03 10:06 
  • LTC朝 LTC朝 回复 Zwzz(提问者) 有天数之后和年份、月份进行整合成短日期样式,再和数据表中的日期进行匹配
    2021-12-03 10:08 
  • Zwzz Zwzz(提问者) 回复 LTC朝 我去试一下你的图例
    2021-12-03 10:18 
  • LTC朝 LTC朝 回复 Zwzz(提问者) 之后把行1和列B都隐藏
    2021-12-03 10:24 
最佳回答
0
free_zzLv6中级互助
发布于2021-12-3 10:02(编辑于 2021-12-3 10:34)

需要有一张日期维表,当成左表关联你这张交易数据表

弄个子查询把你想要的月份所有日期查出来,参数a表示你可以传的月份,如下:

image.png

SELECT 

ADDDATE(y.first, x.d - 1) as d

FROM

(

SELECT 1 AS d UNION ALL

SELECT 2 UNION ALL

SELECT 3 UNION ALL

SELECT 4 UNION ALL

SELECT 5 UNION ALL

SELECT 6 UNION ALL

SELECT 7 UNION ALL

SELECT 8 UNION ALL

SELECT 9 UNION ALL

SELECT 10 UNION ALL

SELECT 11 UNION ALL

SELECT 12 UNION ALL

SELECT 13 UNION ALL

SELECT 14 UNION ALL

SELECT 15 UNION ALL

SELECT 16 UNION ALL

SELECT 17 UNION ALL

SELECT 18 UNION ALL

SELECT 19 UNION ALL

SELECT 20 UNION ALL

SELECT 21 UNION ALL

SELECT 22 UNION ALL

SELECT 23 UNION ALL

SELECT 24 UNION ALL

SELECT 25 UNION ALL

SELECT 26 UNION ALL

SELECT 27 UNION ALL

SELECT 28 UNION ALL

SELECT 29 UNION ALL

SELECT 30 UNION ALL

SELECT 31

) x,(SELECT '${DATEINMONTH(CONCATENATE(a,'-01'),-1)}' - INTERVAL DAY('${DATEINMONTH(CONCATENATE(a,'-01'),-1)}') - 1 DAY AS first, DAY('${DATEINMONTH(CONCATENATE(a,'-01'),-1)}') AS yestoday) y

WHERE x.d <= y.yestoday

  • Zwzz Zwzz(提问者) 可以不建表实现吗,客户那边不让建
    2021-12-03 10:06 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-12-3 10:02

简单方法:

新建一张日期表A,然后

SELECT * FROM A RIGHT JOIN (交易数据) B ON A.日期=B.日期  where XXXXXX

  • Zwzz Zwzz(提问者) 可以不建表实现吗,客户那边不让建
    2021-12-03 10:06 
  • Z4u3z1 Z4u3z1 回复 Zwzz(提问者) 什么数据库?
    2021-12-03 10:11 
  • Zwzz Zwzz(提问者) 回复 Z4u3z1 mysql
    2021-12-03 10:14 
  • Z4u3z1 Z4u3z1 回复 Zwzz(提问者) https://blog.csdn.net/kunlyy/article/details/89519205?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link 参考这个 构造一个表出来然后left或者right JOIN
    2021-12-03 10:19 
最佳回答
0
胡歌Lv7中级互助
发布于2021-12-3 10:20

如果是sqlserver数据库,可以用系统表

SELECT number FROM MASTER..spt_values WHERE  TYPE = 'p'

  • 5关注人数
  • 378浏览人数
  • 最后回答于:2021-12-3 10:34
    请选择关闭问题的原因
    确定 取消
    返回顶部