小编Kis*_*ore的帖子

合并前一个记录之后的日期有零天或一天间隔的日期

我想在开始日期跟随结束日期或开始日期等于 SQL Server 中基于 ID 的结束日期时将多个记录合并为单个记录,同时在该组中获取 MAX(ID2)

以下是示例输入和输出。还添加了输入表的 SQL 代码:

create table #T (ID1 INT, ID2 INT, StartDate DATE, EndDate DATE)

insert into #T values
(100, 764286, '2019-05-01', '2019-05-31'),
(100, 764287, '2019-06-01', '2019-06-30'),
(100, 764288, '2019-07-10', '2019-07-31'),
(101, 764289, '2020-02-01', '2020-02-29'),
(101, 764290, '2020-02-29', '2020-03-31'),
(102, 764291, '2021-10-01', '2021-10-31'),
(102, 764292, '2021-11-01', '2021-11-30'),
(102, 764293, '2021-11-30', '2021-12-31'),
(103, 764294, '2022-01-01', '2022-01-31');
Run Code Online (Sandbox Code Playgroud)

示例输入和输出

这是我尝试过的脚本,但它没有给出我期望的 ID 100 的结果,它不应该合并与 ID 100 相关的所有记录

select m.ID1,
       NewID2  AS ID2,
       m.StartDate,
       lead(dateadd(day, -1, StartDate), 1, MaxEndDate) over …
Run Code Online (Sandbox Code Playgroud)

sql database sql-server window-functions gaps-and-islands

2
推荐指数
1
解决办法
751
查看次数

根据列名称将一行拆分为多行

我想根据列名称在 SQL Server 中将一行拆分为多行。也希望在不多次使用 union 的情况下实现这一点。

以下是示例输入和输出。还添加了输入表的 SQL 代码:

单击此处查看示例结果

create table T (
   Id INT, 
   A_MIN INT, 
   A_MAX INT, 
   A_VAL INT, 
   B_MIN INT, 
   B_MAX INT, 
   B_VAL INT, 
   C_MIN INT, 
   C_MAX INT, 
   C_VAL INT
)

insert into T values (4334, 25, 40, 30, 1, 9, 7, 15, 28, 9)
insert into T values (4335, 45, 48, 46, 0, 0, 0, 3, 8, 1)
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

1
推荐指数
1
解决办法
1318
查看次数