1

给定:具有字段 F1、F2、F3 的表 A,前两个字段是 int,最后是 varchar。F1 唯一,F2 和 F3 可以包含任何值

F1  F2  F3
==========
1   1   A
2   1   A
3   1   A
9   1   B
19  2   B
20  2   C
29  2   C
34  2   B
35  2   A
36  2   A
37  2   A
49  2   A

我需要为 F1 的连续范围的 F2 和 F3 的每个组合生成计数器,格式如下:

Start Count F2 F3
=================
1     3     1  A
9     1     1  B
19    1     2  B
20    1     2  C
29    1     2  C
34    1     2  B
35    3     2  A
49    1     2  A

我知道如何使用游标完成任务,想知道是否可以仅使用 select 语句产生结果?

更新 1 - 抱歉,如果不清楚 - 由于 F1 中的刹车,我希望 2-A 的最后一个间隔被分成两个。

4

1 回答 1

4
WITH MyCTE AS
(
  SELECT  T1.F1,
          T1.F2,
          T1.F3,
          ISNULL((
            SELECT TOP 1 F1
            FROM table1 AS x
            WHERE T1.F1 < x.F1 AND (T1.F3 = x.F3 AND T1.F2 = x.F2)
            ORDER BY F1 DESC
          ),0) AS grpby
  FROM    Table1 T1 
)

SELECT  MIN(F1) AS Start,
        COUNT(F1) AS [Count],
        F2,
        F3
FROM    MyCTE
GROUP BY F2,
        F3,
        grpby
ORDER BY 1

这是一个小提琴示例

于 2013-08-02T10:09:09.770 回答