在sql db2中为从到到日期之间的每一天选择一行

vmdwslir  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(133)

我们有一个旧的遗留表,其点数系统如下所示:
| 起始日期|截止日期|点星期一|点星期二|星期三点数|星期四点数|点星期五|
| - -|- -|- -|- -|- -|- -|- -|
| 2021年6月12日|2021年12月10日|10个|30个|20个|十五个|五个|
| 2021年12月13日|2021年12月13日|10个|第0页|第0页|第0页|第0页|
现在,对于powerbi和我们的分析,我们希望创建一个select查询,它产生如下结果:
| 日期|点数|
| - -|- -|
| 2021年6月12日|10个|
| 2021年7月12日|30个|
| 2021年8月12日|20个|
| 2021年9月12日|十五个|
| 2021年12月10日|五个|
| 2021年12月13日|10个|
如何在db2中完成这样的工作?
提前感谢您的帮助!

pnwntuvh

pnwntuvh1#

您可以使用递归CTE列出所有日期,然后使用DECODEDAYOFWEEK_ISO的结果设置为点

with table1 (fromdate, untildate, monday, tuesday, wednesday, thursday, friday) as (
  values
  (date '2021-12-06', date '2021-12-10', 10, 30, 20, 15, 5),
  (date '2021-12-13', date '2021-12-13', 10, 0, 0, 0, 0)
  ),
alldates (fromdate, untildate, monday, tuesday, wednesday, thursday, friday, points_date) as (
  select table1.*, fromdate as points_date from table1
  union all
  select fromdate, untildate, monday, tuesday, wednesday, thursday, friday, points_date + 1 day from alldates where points_date < untildate
)
select
  points_date, decode(dayofweek_iso(points_date), 1, monday, 2, tuesday, 3, wednesday, 4, thursday, 5, friday) points
from alldates
order by points_date

相关问题