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

Откуда:
Сообщений: 62
Добрый день!
Есть таблица:
код магазин
10000 А,Б,В,Г,Д

нужно сделать:
код магазин
10000 А
10000 Б
10000 В
10000 Г
10000 Д
Подскажите пожалуйста,как это можно реализовать?
29 сен 11, 10:30    [11352907]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
miksoft
Member

Откуда:
Сообщений: 38851
количество значений в поле `магазин` ограничено?
29 сен 11, 11:04    [11353173]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ilikov
Member

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

нет,количество может меняться...Может быть:
Абинск, Геленджик, Москва
или например:
Москва,Новочеркасск
29 сен 11, 11:07    [11353215]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
artas
Member

Откуда: Киев сити
Сообщений: 1078
ilikov,

лучше нормализировать таблицы
29 сен 11, 12:02    [11353803]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ilikov
Member

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

Да всё понятно, но возникла такая проблема, ранее данные забивались не правильно, нужно их привести к нормальному виду
29 сен 11, 13:10    [11354548]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
AlexeyVD
Member

Откуда:
Сообщений: 473
Проще всего будет реализовать это средствами какого-нибудь языка программирования и в будущем избегать подобного способа хранения данных.
29 сен 11, 15:44    [11356270]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ilikov
Member

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

пока нашёл вот такой способ:

Select distinct
[code]
,[distribution_center]
,Substring([distribution_center],0,(CHARINDEX(',',[distribution_center])))
from [Assort_dynamics].[dbo].[novinka_s_param]
теперь осталось доделать цикл
29 сен 11, 16:17    [11356554]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
miksoft
Member

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

а у вас какая СУБД?
29 сен 11, 16:24    [11356616]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ilikov
Member

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

SQL2005? (

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 29 сен 11, 16:36
29 сен 11, 16:34    [11356704]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ё
Guest
declare @t table (код int, магазин varchar(50))

insert into @t
select 10000, 'А,Б,В,Г,Д'

;with d as (select 0 as dig union all select dig+1 from d where dig<99)

select код, substring(магазин, dig+1, isnull(pos, 100)-(dig+1)) as xz
from @t

cross join

(select 0 as dig, nullif(charindex(',', магазин, 1),0) as pos 
from @t

union all

select dig, nullif(charindex(',', магазин, dig+1),0)
from @t,d
where substring(магазин, dig, 1)=',') a

(строк обработано: 1)
код         xz
----------- --------------------------------------------------
10000       А
10000       Б
10000       В
10000       Г
10000       Д

(строк обработано: 5)
29 сен 11, 17:25    [11357186]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
ё
Guest
с учётом "код"
declare @t table (код int, магазин varchar(50))

insert into @t
select 10000, 'Абинск,Геленджик,Москва' union all
select 20000, 'Москва,Новочеркасск'

;with d as (select 0 as dig union all select dig+1 from d where dig<99)

select t.код, substring(магазин, dig+1, isnull(pos, 100)-(dig+1)) as xz 
from @t t

inner join

(select код, 0 as dig, nullif(charindex(',', магазин, 1),0) as pos 
from @t

union all

select код, dig, nullif(charindex(',', магазин, dig+1),0)
from @t,d
where substring(магазин, dig, 1)=',') a

on a.код=t.код

order by t.код, a.dig
(строк обработано: 2)
код         xz
----------- --------------------------------------------------
10000       Абинск
10000       Геленджик
10000       Москва
20000       Москва
20000       Новочеркасск

(строк обработано: 5)
29 сен 11, 17:32    [11357256]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить в столбец значения из строки?  [new]
aleks2
Guest
CREATE function [dbo].[f_StrToTableEx](@str varchar(8000), @delimiter varchar(64)=',')
returns table as
return(
WITH str_nums ( n1, n2, Number ) 
AS 
( 
select  1-DATALENGTH(@delimiter) as n1, charindex(@delimiter, @str+@delimiter) as n2, 0 as Number  
UNION ALL 
select n2 as n1, charindex(@delimiter, @str+@delimiter, n2+DATALENGTH(@delimiter)) as n2, Number+1 as Number
from str_nums
WHERE n2<DATALENGTH(@str)
) 
SELECT SUBSTRING(@str, n1+DATALENGTH(@delimiter), n2-n1-DATALENGTH(@delimiter)) as Value, Number, n1+DATALENGTH(@delimiter) as StartPosition FROM str_nums
)
GO
declare @t table (код int, магазин varchar(50))

insert into @t
select 10000, 'Абинск,Геленджик,Москва' union all
select 20000, 'Москва,Новочеркасск'


select X.код, T.Value
FROM @t X cross apply dbo.f_StrToTableEx(магазин, ',') T
29 сен 11, 19:20    [11357908]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить