TSQL连续计数器

时间:2013-08-02 10:06:30

标签: sql-server-2008 tsql

给定: 表A包含字段F1,F2,F3,前两个字段是整数,最后一个是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 - 很抱歉,如果不清楚 - 我希望将2-A的最后一个时间段拆分为2,因为F1中有制动。

1 个答案:

答案 0 :(得分: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

这是fiddle example