搜索值列表的出现位置

Car*_*usa 6 sql t-sql sql-server sql-server-2008

我正在尝试找到一种优化的方法来识别列表中是否存在一组特定的值.

例如,让我们假设表中的以下记录列表

Id          Value
1           A
2           B
3           A
4           C
5           A
6           B
7           C
8           C
9           A
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来检查序列{A,B}或{A,B,C}出现多少次,例如.

我知道我可以用游标做到这一点,但我正在检查是否有任何其他选项在性能方面更可取.

我期望的结果将是这样的:

{A, B}: 2 times:
{A, B, C}: 1 time.
Run Code Online (Sandbox Code Playgroud)

我正在使用Sql Server.

Gor*_*off 5

可能最简单的方法是使用ANSI标准函数lag()和/或lead():

select count(*)
from (select t.*,
             lead(value) over (order by id) as next_value,
             lead(value, 2) over (order by id) as next_value2,
      from t
     ) t
where value = 'A' and next_value = 'B' and next_value2 = 'C';
Run Code Online (Sandbox Code Playgroud)