Sql 将范围为[a-b]的列拆分为(b-a+1)行
我有一个包含列的表:Sql 将范围为[a-b]的列拆分为(b-a+1)行,sql,sql-server,Sql,Sql Server,我有一个包含列的表: | School | Room | Period | Class | 期间的值可以是以下类型: 一, 二, 三, 1-3 3-4 对于跨越多个时段的类,例如1-3,我需要为时段1、2、3创建记录。所以基本上再插入2个,并添加一个带有适当句号的列 当前状态: School Room Period Class Elm High 100 1 Math Elm High 101 1-3 Eng 所需状态: School Room Peri
| School | Room | Period | Class |
期间的值可以是以下类型:
一,
二,
三,
1-3
3-4
对于跨越多个时段的类,例如1-3,我需要为时段1、2、3创建记录。所以基本上再插入2个,并添加一个带有适当句号的列
当前状态:
School Room Period Class
Elm High 100 1 Math
Elm High 101 1-3 Eng
所需状态:
School Room Period Class
Elm High 100 1 Math
Elm High 101 1 Eng
Elm High 101 2 Eng
Elm High 101 3 Eng
有什么想法吗?对此,我只能使用T-SQL/SQL。假设您的句点只有一位数字,下面是一个使用递归CTE的简单方法:
with t as (
select v.*
from (values ('Elm High', 100, '1', 'Math'),
('Elm High', 101, '1-3', 'Eng')
) v(School, Room, Period, Class)
),
cte as (
select school, room, convert(int, left(period, 1)) as period, class, convert(int, right(period, 1)) as period_end
from t
union all
select school, room, period + 1, class, period_end
from cte
where period < period_end
)
select school, room, period, class
from cte
order by school, room, period;
还有一个
不难将其扩展到大于9的周期。但这似乎是学校一天中的很多时段。您的sql server版本是什么?很有效!如何将其扩展到大于9的周期?再次感谢您,很抱歉回复太晚。@lazycamper。您只需更改字符串最初拆分的方式即可获得边界。