Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将范围为[a-b]的列拆分为(b-a+1)行_Sql_Sql Server - Fatal编程技术网

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。您只需更改字符串最初拆分的方式即可获得边界。