sql - 编写 T-SQL 脚本以返回所需的结果
问题描述
我很难编写一个 T-SQL 脚本来返回所需的结果。
这是我的数据:
所需的结果是这样的:
这是我针对此结果的 Oracle 脚本:
CREATE TABLE t
(
contract_no VARCHAR2(100),
begin_date DATE,
end_date DATE
);
INSERT INTO t VALUES ('AAA',to_date('22-12-2020','DD-MM-YYYY'),to_date('13-05-2021','DD-MM-YYYY'));
INSERT INTO t VALUES ('BBB',to_date('20-03-2019','DD-MM-YYYY'),to_date('01-06-2019','DD-MM-YYYY'));
SELECT *
FROM t;
select contract_no
, begin_date
, end_date
, l
, last_day(add_months(trunc(begin_date,'MONTH'),l-1))
from t, lateral (select level l
from dual
connect by level <= round(months_between(last_day(end_date),trunc(begin_date,'MONTH')))-1);
我需要 T-SQL 中的等效脚本。
提前致谢
解决方案
我会在两个数据库中使用递归 CTE。在 SQL Server 中,这看起来像:
with cte as (
select contract_no, begin_date, end_date, eomonth(begin_date) as date
from t
union all
select contract_no, begin_date, end_date, eomonth(date, 1) as date
from cte
where date < eomonth(end_date, -1)
)
select *
from cte;
递归 CTE 的语法在 Oracle 中略有不同。
这是一个 db<>fiddle。
推荐阅读
- c - 在 C 中转换无符号 64 位数字的字节顺序问题
- regex - 正则表达式匹配同一行中的多个值
- javascript - Next JS Layout 组件,将 props 传递给 children
- javascript - R Shiny Dashboard valueBox:从一个数字到另一个数字的动画
- python - 当我尝试对数据帧执行一些逻辑操作时,为什么会出现此错误?
- c# - LINQ 查询中左外连接子句的多个条件
- java - 如何通过 NIO ServerSocketChannel 实现 REST 和安全连接(证书)
- filter - 样式层取决于多个特征属性
- powershell - Powershell 似乎异步运行语句?
- java - Gradle Kotlin、Cucumber 和 OKHttp