给定: 表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中有制动。
答案 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