Разделить записи на несколько строк в зависимости от диапазона, указанного в столбце, с помощью сервера SQL

0

Я ищу Split записей в несколько строк на основе диапазона, предоставляемого в столбце с использованием SQL-сервера. Пожалуйста, помогите.

Пример источника данных, указанный ниже:

account_no    range
abc_111       2001…2010

Ожидаемые целевые данные, указанные ниже:

account_no         range
abc_111             2001
abc_111             2002
abc_111             2003
abc_111             2004
abc_111             2005
abc_111             2006
abc_111             2007
abc_111             2008
abc_111             2009
abc_111             2010

Также источники и ожидаемые целевые данные показаны на прилагаемом рисунке.

  • 0
    Другой пример - исходный набор данных Account_no Диапазон abc 2001 ... 2010 xyz 301 ... 315 xyz 401 ... 403 Ожидаемый целевой набор данных Account_no Диапазон abc 2001 abc 2002 abc 2003 abc 2004 abc 2005 abc 2006 abc 2007 abc 2008 abc 2009 abc 2009 ABC 2010 XYZ 301 XYZ 302 XYZ 303 XYZ 304 XYZ 305 XYZ 401 XYZ 402 XYZ 403
Теги:
split

1 ответ

0

Для разделения данных вам нужна таблица чисел. Вы можете сами создать его:

select sd.account_no, substring_index(range, '...', 1) + n.n - 1
from sourcedata sd join
     (select 1 as n union all
      select 2 union all
      . . .
      select 10
     ) n
     on n.n >= 1 and
        n.n <= substring_index(range, '...', -1) - substring_index(range, '...', 1);
  • 0
    Спасибо за ответ. У каждого моего аккаунта разное количество диапазонов. Он может иметь любые числа, например, 10, 5 или 100.
  • 0
    Исходный набор данных Account_no Диапазон abc 2001 ... 2010 xyz 301 ... 315 xyz 401 ... 403 Ожидаемый целевой набор данных Account_no Диапазон abc 2001 abc 2002 abc 2003 abc 2005 abc 2005 abc 2006 abc 2007 abc 2008 abc 2009 abc 2010 xyz 301 XYZ 302 XYZ 303 XYZ 304 XYZ 305 XYZ 401 XYZ 402 XYZ 403
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню