【发布时间】:2020-04-21 03:55:12
【问题描述】:
我需要一个数据库选择查询解决方案,用于将一系列细分细节转换为它的摘要版本,可能在视图中。考虑下表。它有一个复合主键(PK_1、PK_2、PK_3 和 SEQUENCE_NO)。
PK_1 PK_2 PK_3 SEQUENCE_NO STATUS_CODE
======== ==== ==== =========== ===========
20200421 A 1 1 Y
20200421 A 1 2 Y
20200421 A 1 3 Y
20200421 A 1 4 N
20200421 A 1 5 Y
20200421 A 1 6 Y
20200421 A 2 7 Y
20200421 A 2 8 Y
20200421 B 3 9 Y
20200421 B 3 10 Y
20200421 B 3 11 Y
20200422 B 3 11 Y
仅包括所有带有“Y”的STATUS_CODE 的记录,如何以连续记录的方式呈现记录,分别对应于它们的复合主键,形成值范围(由SEQUENCE_FROM 和@987654328 表示@,见下文)同时显示可能表示缺失行的间隙,或带有 STATUS_CODE 且值不是“Y”的行?
PK_1 PK_2 PK_3 SEQUENCE_FROM SEQUENCE_TO
======== ==== ==== ============= ===========
20200421 A 1 1 3
20200421 A 1 5 6
20200421 A 2 7 8
20200421 B 3 9 11
20200422 B 3 11 11
我使用了MIN 和MAX,但显然它不适合显示范围之间的差距。
【问题讨论】:
-
PK_3 和 PK_2 如何在您的预期结果中得到交换?
-
@zealous 抱歉,这显然是一个错字。
-
你能解释一下
SEQUENCE_FROM和SEQUENCE_TO的逻辑吗? -
考虑到记录
20200421-A-1,我希望所有带有PK_1、PK_2和PK_3的记录都将自己分组到一行中,在示例中为第 1 行到第 6 行. 排除STATUS_CODE不等于“Y”的行,即第1-3 行和第5-6 行。我希望这两个范围在结果集上显示为单独的不同行。它并不总是两个范围。例如SEQUENCE_NO的最小值为1,最大值为100,而数字50、70缺失,则应拆分为1-49、51-69、71到100。