T-SQL反向旋转字符串的每个字符

时间:2010-10-06 10:11:45

标签: sql sql-server sql-server-2005 tsql

我们在sql server 2005 db中有一个如下表:

event_id   staff_id   weeks

1          1          NNNYYYYNNYYY
1          2          YYYNNNYYYNNN
2          1          YYYYYYYYNYYY

这是来自一个时间表软件,基本上是说哪些工作人员被分配到一个事件(注册)和他们正在教授注册的那一周。所以staff_id 1并没有教授活动1的前3周,而是教授以下4个......

是否有一种简单的方法可以将其转换为更简单的形式,例如:

event_id   staff_id   week
1          1          4
1          1          5
1          1          6
1          1          7
1          1          10
1          1          11
1          1          12
1          2          1
1          2          2
1          2          3
1          2          7
1          2          8
1          2          9
2          1          1
2          1          2
2          1          3
2          1          4
2          1          5
2          1          6
2          1          7
2          1          8
2          1          10
2          1          11
2          1          12

1 个答案:

答案 0 :(得分:3)

WITH cte AS
(
    SELECT 1 AS [week]
    UNION ALL
    SELECT [week] + 1
    FROM cte
    WHERE [week] < 53
)
SELECT t.event_id, t.staff_id, cte.[week]
FROM your_table AS t
    INNER JOIN cte
        ON LEN(ISNULL(t.weeks, '')) >= cte.[week]
            AND SUBSTRING(t.weeks, cte.[week], 1) = 'Y'
ORDER BY t.event_id, t.staff_id, cte.[week]