创建条件递增值-SQL Server

创建条件递增值-SQL Server,sql,sql-server-2012,Sql,Sql Server 2012,我有一张有连续日期列表的桌子。该表还有一个日期类型字段,包括:工作日(B)、星期六(X)、星期日(Y)和假日(H) 我想添加一个具有递增数字的附加列。 只有在以下情况下,该数字才应增加: 这是列表中的第一天,也是工作日 前一天是工作日 预期结果: DATE DAY_TYPE NUMBER 2017-03-09 B 1 2017-03-10 B 2 2017-03-11 X 3 2017-03-12 Y

我有一张有连续日期列表的桌子。该表还有一个日期类型字段,包括:工作日(B)、星期六(X)、星期日(Y)和假日(H)

我想添加一个具有递增数字的附加列。 只有在以下情况下,该数字才应增加:

  • 这是列表中的第一天,也是工作日
  • 前一天是工作日
预期结果:

DATE         DAY_TYPE   NUMBER
2017-03-09   B          1
2017-03-10   B          2
2017-03-11   X          3
2017-03-12   Y          3
2017-03-13   H          3
2017-03-14   B          3
2017-03-15   B          4
2017-03-16   H          5
2017-03-17   B          5

您可以使用递归


那么,到目前为止,您尝试了什么?您遇到了什么问题?可能是递归CTE?您能分享您的成果吗。。这仅仅是你需要实现的逻辑。。语句插入值。我真的不确定如何解决这个问题。已经考虑了一段时间的嵌入式案例,但似乎无法想出一个合理的方法来让它工作。对不起,我不是一个经验丰富的SQL用户,大部分是自学成才的!谢谢@Cool_Br33ze,只要我在最后的SELECT FROM语句后添加“OPTION(MAXRECURSION 0);”就完全按照要求工作了。干杯
DECLARE @sample TABLE ( [date] DATE, day_type CHAR(1))
INSERT @sample
( [date], day_type )
VALUES
('2017-03-09','B')
,('2017-03-10','B')
,('2017-03-11','X')
,('2017-03-12','Y')
,('2017-03-13','H')
,('2017-03-14','B')
,('2017-03-15','B')
,('2017-03-16','H')
,('2017-03-17','B')

;WITH cteSample
AS(
SELECT
      ROW_NUMBER()OVER(ORDER BY [S].[date]) 'RN'
    , S.[date]
    , S.day_type
FROM @sample S
),cteRecursive
AS(
    SELECT
        b.RN, b.[date], b.day_type, 1 'Number'
    FROM
        cteSample b
    WHERE
        b.RN = 1 AND b.day_type = 'B'
    UNION ALL
    SELECT
         e.RN, e.[date], e.day_type
        ,CASE WHEN ( e.day_type IN ('B') AND r.day_type IN ('B') OR e.day_type NOT IN ('B') AND r.day_type IN ('B') )
             THEN r.Number + 1 ELSE r.Number END
    FROM
        cteSample  e
    INNER JOIN
        cteRecursive r ON e.RN = r.rn + 1
    )
SELECT * FROM cteRecursive