Разбить столбец с диапазоном [ab] на (b - a + 1) строки - PullRequest
0 голосов
/ 04 июня 2019

У меня есть таблица со столбцами:

| School | Room | Period | Class |

Значения для периода могут быть такими:

  • 1

  • 2

  • 3

  • 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.

1 Ответ

2 голосов
/ 04 июня 2019

Предполагая, что ваши периоды состоят только из одной цифры, вот простой подход с использованием рекурсивного 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;

и db <> скрипка .

ItНетрудно расширить это до периодов, превышающих 9. Но это похоже на множество периодов в течение школьного дня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...