使用 SQL Server 2008 和基于集合的解决方案,我如何操作以下数据:
GroupID Code StartSeq EndSeq StartDayNo EndDayNo
1755549 3506 0 0 59442 59444
1755549 2928 1 3 59444 59465
1755549 2928 4 5 59465 59467
1755549 2928 6 6 59467 59481
1755549 2928 7 8 59481 59482
1755549 2928 9 9 59482 59494
1755549 3429 10 10 59494 59494
1755549 2928 11 11 59494 59496
1755549 3429 12 12 59496 59496
1755549 2928 13 13 59496 59501
要得到这个结果:
GroupID Code StartSeq EndSeq StartDayNo EndDayNo
1755549 3506 0 0 59442 59444
1755549 2928 1 9 59444 59494
1755549 3429 10 10 59494 59494
1755549 2928 11 11 59494 59496
1755549 3429 12 12 59496 59496
1755549 2928 13 13 59496 59501
我最初提出的查询只会通过使用连接将 2 行组合在一起,在示例中有 5 行需要仅组合为 1 行。
下面的脚本包含一些示例数据。请注意,除了原始示例之外还有其他数据。
DECLARE @SampleData TABLE (
[GroupID] [int] NOT NULL,
[Code] [varchar](4) NOT NULL,
[StartSeq] [int] NOT NULL,
[EndSeq] [int] NOT NULL,
[StartDayNo] [int] NOT NULL,
[EndDayNo] [int] NOT NULL
)
INSERT INTO @SampleData
VALUES
(1622494, N'2082', 0, 0, 59136, 59137)
, (1622494, N'2082', 1, 1, 59137, 59167)
, (1622494, N'2934', 2, 2, 59167, 59335)
, (1622494, N'3613', 3, 3, 59335, 59350)
, (1755549, N'3506', 0, 0, 59442, 59444)
, (1755549, N'2928', 1, 3, 59444, 59465)
, (1755549, N'2928', 4, 5, 59465, 59467)
, (1755549, N'2928', 6, 6, 59467, 59481)
, (1755549, N'2928', 7, 8, 59481, 59482)
, (1755549, N'2928', 9, 9, 59482, 59494)
, (1755549, N'3429', 10, 10, 59494, 59494)
, (1755549, N'2928', 11, 11, 59494, 59496)
, (1755549, N'3429', 12, 12, 59496, 59496)
, (1755549, N'2928', 13, 13, 59496, 59501)
这不是我写过的最漂亮的查询,但它似乎无需任何递归即可完成工作。(我假设输出需要按 GroupID 和代码分组。)