2

我想确定 2 个类别的范围。类别 A 和类别 B。A 从 1 到 15 开始,B 从 16 到 31 开始,然后 A 再次从 32 到 40 开始。现在如果运行此查询

select min(range), max(range) 
from table
group by category
order by category

它给了我从 1 到 40 的 A 类范围和从 16 到 31 的 B 类范围。我想打破范围并希望看到结果

Category A 1 to 15
Category B 16 to 31
Category A 32 to 40

我怎么做?我需要第三列吗?我知道如果我有新类别的第 3 列,可以分别说 CDE,我可以按这些进行分组并获得结果。但我不知道该怎么做。

请帮帮我。

谢谢-Adeel

4

2 回答 2

1

假设您试图将类别分成由连续整数组成的组,那么以下将起作用:

select category, diff, min(range), max(range)
from 
(
   select category, range,
      (range - row_number() over (partition by category order by range)) as diff
   from table
) t
group by category
order by 1, 3

此查询基于以下观察:在给定的类别分组内,数字按顺序增加。因此,减去一个整数序列将产生一个常数,然后可以将其用于识别该特定范围。

Row_Number()是一个标准的 SQL 函数,因此它在大多数数据库中都可用。

于 2012-05-03T02:18:59.310 回答
0

听起来递归 CTE应该适合您,但这取决于您的 RDBMS 如何工作(以及是否支持)但是,您可能可以做某种增量计数,可以用作每个的乘数拼凑直到最大限制。如果您让我们知道 RDBMS,我可以提供一个示例。

于 2012-05-03T01:40:42.037 回答