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

Откуда:
Сообщений: 679
Всем привет!

есть табличка

col1 INT,
col2 NVARCHAR(400)

значение таблички
col1, col2
1, a
1, a
1, a
1, b
1, c
2, d
2, d
3, e
3, e
3, e
5, f
5, f


требуется запросом для каждого уникального значение col1 вывести строку сумм значений col2.

результат запроса должен выглядеть так
col1, col2
1, aaabc
2, dd
3, eee
5, ff

как этого можно добиться ?

с помощью with не получилось решить задачу.
1 ноя 12, 20:22    [13411022]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
FAQ
1 ноя 12, 20:23    [13411026]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Testor1
Member

Откуда:
Сообщений: 679
Гавриленко Сергей Алексеевич
FAQ


http://msdn.microsoft.com/ru-ru/library/ms175972.aspx

не нашел то, что нужно
и в google ищу тоже
1 ноя 12, 20:38    [13411059]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
Testor1
Гавриленко Сергей Алексеевич
FAQ


http://msdn.microsoft.com/ru-ru/library/ms175972.aspx

не нашел то, что нужно
и в google ищу тоже

Мы заботимся о слепых:

К сообщению приложен файл. Размер - 68Kb
1 ноя 12, 20:47    [13411083]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
подобных тем наверняка сотни!
with x as(
select 1 col1, 'a' col2 union all
select 1, 'a' union all
select 1, 'a' union all
select 1, 'b' union all
select 1, 'c' union all
select 2, 'd' union all
select 2, 'd' union all
select 3, 'e' union all
select 3, 'e' union all
select 3, 'e' union all
select 5, 'f' union all
select 5, 'f'
)

select distinct col1,
(
select (select col2 from x where col1=z.col1 for xml path(''),type).value('.','varchar(max)')
) col2
from x z
1 ноя 12, 20:56    [13411099]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
а вообще решение явно не корректное,
т.к. не задан способ сортировки для col2
1 ноя 12, 20:57    [13411101]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
with x as(
select 1 col1, 'a' col2 union all
select 1, 'a' union all
select 1, 'a' union all
select 1, 'b' union all
select 1, 'c' union all
select 2, 'd' union all
select 2, 'd' union all
select 3, 'e' union all
select 3, 'e' union all
select 3, 'e' union all
select 5, 'f' union all
select 5, 'f'
),
y as (
select *,row_number()over(order by (select 1)) r
from x
),
z as(
select * ,1 cnt, cast(col2 as varchar(max)) as res
from y where r=1 
union all
select y.*,cnt+1, case when z.col1=y.col1 then z.res+y.col2 else y.col2 end
from y,z where y.r=cnt+1
)
select col1,max(res) col2
from z
group by col1


а вот с WITH, если очень хочется
1 ноя 12, 21:06    [13411110]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Testor1
Member

Откуда:
Сообщений: 679
init.ora,

order by вроде бы работает

				SELECT a.request_body_id, a.response_type_id,(select c.additional_info+CHAR(10)+CHAR(13) as 'data()' from dbo.tb_responses c where a.request_body_id=c.request_body_id AND a.response_type_id = c.response_type_id  order by c.additional_info for xml path('') ) as response_body
				FROM tb_responses a INNER JOIN tb_requests_body b ON a.request_body_id = b.id
				WHERE a.[status] = 'Q'
					AND a.[response_type_id] IN (6,12)
					AND b.request_datetime BETWEEN @sdatetime AND @sdatetime
				GROUP BY  a.request_body_id, a.response_type_id	


Всем спасибо за помощь
1 ноя 12, 22:24    [13411317]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Testor1
Member

Откуда:
Сообщений: 679
Гавриленко Сергей Алексеевич,

Спасибо за ценный ресурс. Указать в посте ссылку было бы более информативно, чем просто слово FAQ.
1 ноя 12, 22:26    [13411321]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
Testor1
Гавриленко Сергей Алексеевич,

Спасибо за ценный ресурс. Указать в посте ссылку было бы более информативно, чем просто слово FAQ.
Оно в шапке форума, слово это. Пора бы уже знать.
2 ноя 12, 01:22    [13411819]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
Testor1
init.ora,

order by вроде бы работает

				SELECT a.request_body_id, a.response_type_id,(select c.additional_info+CHAR(10)+CHAR(13) as 'data()' from dbo.tb_responses c where a.request_body_id=c.request_body_id AND a.response_type_id = c.response_type_id  order by c.additional_info for xml path('') ) as response_body
				FROM tb_responses a INNER JOIN tb_requests_body b ON a.request_body_id = b.id
				WHERE a.[status] = 'Q'
					AND a.[response_type_id] IN (6,12)
					AND b.request_datetime BETWEEN @sdatetime AND @sdatetime
				GROUP BY  a.request_body_id, a.response_type_id	


Всем спасибо за помощь


order by <что>??

order by col1,col2 ?
order by col2,col1 ?

на это стоит обращать внимание
2 ноя 12, 21:16    [13416870]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
в первом сообщении этого не было просто :D
2 ноя 12, 21:17    [13416875]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
Testor1
Member

Откуда:
Сообщений: 679
init.ora
в первом сообщении этого не было просто :D


order by c.additional_info

select c.additional_info+CHAR(10)+CHAR(13) as 'data()' from dbo.tb_responses c where a.request_body_id=c.request_body_id AND a.response_type_id = c.response_type_id  order by c.additional_info for xml path('') 


спасибо всем за поддержку
3 ноя 12, 10:30    [13417777]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия и строка  [new]
SirMix
Member

Откуда: Киев
Сообщений: 79
Testor1,

немного оффтоп - мне такой вопрос задавали на собеседовании... ток сначала спросили просто запросом выдать через разделитель колонку, а потом то же самое, только с группировкой (один в один как ваш вопрос) - решил с помощью for xml path('')
5 ноя 12, 15:41    [13422727]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить