Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывод значений из одной строки в несколько строк  [new]
kombala
Member

Откуда:
Сообщений: 41
Есть таблица с внутренними кодами услуг, с общими кодами и промежуточная таблица. Проблема в том, что в промежуточной таблице по какой-то причине коды услуг внесены в одну строку через запятую, и чтобы подсчитать коэффициент стоимости необходимо сложить модификаторы услуг на каждую процедуру.
Грубо говоря, у меня сейчас в промежуточной таблице так данные хранятся:

id | cdusl | cdaction
1 | 1 | 1
2 | 1,2,3,4 | 2
3 | 3,4 | 3
29 июн 17, 14:37    [20599690]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
kombala
Member

Откуда:
Сообщений: 41
А редактировать нельзя случайно отправленные?

Чтобы нормально связать эти коды, нужно разбить значения из второго столбца на несколько строк, как-то так:

1 | 1 | 1
2 | 1 | 2
2 | 2 | 2
2 | 3 | 2
2 | 4 | 2
3 | 3 | 3
3 | 4 | 3

Подскажите пожалуйста.
29 июн 17, 14:39    [20599694]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3675
Функция, возвращающая таблицу?
29 июн 17, 15:06    [20599800]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
_human
Member

Откуда:
Сообщений: 560
kombala
А редактировать нельзя случайно отправленные?

Чтобы нормально связать эти коды, нужно разбить значения из второго столбца на несколько строк, как-то так:

1 | 1 | 1
2 | 1 | 2
2 | 2 | 2
2 | 3 | 2
2 | 4 | 2
3 | 3 | 3
3 | 4 | 3

Подскажите пожалуйста.


;with cte(id,cdusl,cdaction) as 
(
	select 1 , '1',  1
	union all select 2 , '1,2,3,4', 2
	union all select 3 , '3,4', 3
)
, src as 
(
	select id, replace(cdusl, ',', '.') as cdusl, cdaction 
	from cte
)

select * 
from src s
cross apply 
(
	select top 4 parsename(s.cdusl, row_number() over(order by newid())) as x
	from master..spt_values v
) as ca
where ca.x is not null
order by s.id, x
29 июн 17, 15:40    [20599963]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Функция, которая делит строку на слова

Ну, и тут неоднократно писали, как это же сделать с помощью XML...
29 июн 17, 16:34    [20600217]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
kombala
Member

Откуда:
Сообщений: 41
_human,

Спасибо большое.
29 июн 17, 16:55    [20600302]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
kombala
Member

Откуда:
Сообщений: 41
_human,

Я дурак, можете подсказать, что делать, если значений там больше 4х?
Т.е. вот делаю:
;with cte(id,cdusl,cdaction) as 
(
	select 2 , '1,0,1,4', 2
)
, src as 
(
	select id, replace(cdusl, ',', '.') as cdusl, cdaction 
	from cte
)

select * 
from src s
cross apply 
(
	select parsename(s.cdusl, row_number() over(order by newid())) as x
	from master..spt_values v
) as ca
where ca.x is not null
order by s.id, x


И мне красиво выводится
idcduslcdactionx
21.0.1.420
21.0.1.421
21.0.1.421
21.0.1.424


А добавляю n значений, после четвертого:
select 2 , '1,0,1,4,10,12,55', 2


и в столбце 'x' только null'ы ставятся.
30 июн 17, 13:35    [20602763]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
_human
Member

Откуда:
Сообщений: 560
kombala,

Если сервер 2016-й то используйте STRING_SPLIT
Или найдите на форуме уже готовую функцию для парсирга
30 июн 17, 15:14    [20603275]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
_human
kombala,

Если сервер 2016-й то используйте STRING_SPLIT
Или найдите на форуме уже готовую функцию для парсирга
Я же дал уже ссылку?
- Доктор, меня никто не замечает! ©
30 июн 17, 18:10    [20604063]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений из одной строки в несколько строк  [new]
kombala
Member

Откуда:
Сообщений: 41
_human,
iap,

Большое спасибо, теперь заработало как надо.
3 июл 17, 09:50    [20608017]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить