如果SQL Server中的两个连续行是任意的,如何进行比较?

如果SQL Server中的两个连续行是任意的,如何进行比较?,sql,sql-server,tsql,gaps-and-islands,Sql,Sql Server,Tsql,Gaps And Islands,我有一个SQL问题,我不能只用SQL来解决 问题是:我有一个有两列的表。一个是问题(int列),另一个是答案(varchar(1)),如下所示: Question Answer --------+--------- 1 | A 2 | A 3 | C 4 | D 5 | D 6 | D 7 | E 8 | A 9 | B 10 | A 1

我有一个SQL问题,我不能只用SQL来解决

问题是:我有一个有两列的表。一个是
问题
(int列),另一个是
答案
varchar(1)
),如下所示:

Question  Answer
--------+---------
1       |   A
2       |   A
3       |   C
4       |   D
5       |   D
6       |   D
7       |   E
8       |   A
9       |   B
10      |   A
11      |   A
12      |   A
输出应该是这样的

Range        Answer
-----------+----------
1-2        |   A
3-3        |   C
4-6        |   D
7-7        |   E
8-8        |   A
9-9        |   B
10-12      |   A

我只是能够做到这一点

select question, answer
from table
order by answer, question asc

很抱歉,我对SQL非常陌生,所以我不知道如何编写此查询。

这是一个空白和孤岛问题。您可以使用
row\u number()
枚举答案的值来处理它。这与问题之间的区别是不变的——确定岛屿:

select min(question), max(question), answer
from (select t.*, row_number() over (partition by answer order by question) as seqnum
      from t
     ) t
group by (question - seqnum), answer
order by min(question);

这是一个缺口和孤岛问题。您可以使用
row\u number()
枚举答案的值来处理它。这与问题之间的区别是不变的——确定岛屿:

select min(question), max(question), answer
from (select t.*, row_number() over (partition by answer order by question) as seqnum
      from t
     ) t
group by (question - seqnum), answer
order by min(question);

这是一个缺口和孤岛问题。下面是一种使用行号之间的差异来定义组的方法

select 
    concat(min(question), '-', max(question)) range,
    answer 
from (
    select 
        t.*,
        row_number() over(order by question) rn1,
        row_number() over(partition by answer order by question) rn2
    from mytable t
) t
group by answer, rn1 - rn2
order by min(question)

这种方法的优点是,即使
问题
的数字有缺口,它也能工作。

这是一个缺口和孤岛问题。下面是一种使用行号之间的差异来定义组的方法

select 
    concat(min(question), '-', max(question)) range,
    answer 
from (
    select 
        t.*,
        row_number() over(order by question) rn1,
        row_number() over(partition by answer order by question) rn2
    from mytable t
) t
group by answer, rn1 - rn2
order by min(question)
这种方法的优点是,即使
问题
的数字有差距,它也能工作