我有一个表,在那里我有开始和结束日期,我希望这些日期的差异作为列,其余的列可以是相同的所有这些行.

生效日期:

enter image description here

预期yields 为:

enter image description here

请建议我如何处理这些数据.

推荐答案

那只是一个行生成器.例如:

样本数据:

SQL> with test (id, qty, status, start_date, end_date) as
  2    (select 100, 345, 'Y', date '2023-01-01', date '2023-03-15' from dual union all
  3     select 105, 784, 'N', date '2023-11-07', date '2024-01-28' from dual
  4    )

查询(日期格式为DD.MM.YYYY):

  5  select t.*,
  6    to_char(add_months(start_date, column_value - 1), 'mm.yyyy') monthyear
  7  from test t cross join
  8    table(cast(multiset(select level from dual
  9                        connect by level <= ceil(months_between(end_date, start_date))
 10                       ) as sys.odcinumberlist));

        ID        QTY S START_DATE END_DATE   MONTHYE
---------- ---------- - ---------- ---------- -------
       100        345 Y 01.01.2023 15.03.2023 01.2023
       100        345 Y 01.01.2023 15.03.2023 02.2023
       100        345 Y 01.01.2023 15.03.2023 03.2023
       105        784 N 07.11.2023 28.01.2024 11.2023
       105        784 N 07.11.2023 28.01.2024 12.2023
       105        784 N 07.11.2023 28.01.2024 01.2024

6 rows selected.

SQL>

Sql相关问答推荐

SQL从同一表连接列

无法找到正确的SQL查询需求

如何退回当年的所有参赛作品?""

出现5次后,将所有正斜杠替换为连字符

如何从多行数据中获取一行合并数据?

一个SQL查询将在需要的地方多次返回同一成员

返回UPSERT中的旧行值

如何实现同一列的递归计算?

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

在Athena中使用regexp提取括号前的字符串值

如何在android房间中进行多个加入

Select 组中的第一行,但在并发环境中

从输出中删除 jsonb_build_object

递归 CTE 附加为行

我们可以使用连接改进包含多个子查询的查询吗

清理 XML 数据

try 将多行折叠为单个结果

在 SQL 查询中创建滚动日期

pyspark 将列转换为行