Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37202 |
FAQ |
1 ноя 12, 20:23 [13411026] Ответить | Цитировать Сообщить модератору |
Testor1 Member Откуда: Сообщений: 679 |
http://msdn.microsoft.com/ru-ru/library/ms175972.aspx не нашел то, что нужно и в google ищу тоже |
||
1 ноя 12, 20:38 [13411059] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37202 |
Мы заботимся о слепых: К сообщению приложен файл. Размер - 68Kb |
||||
1 ноя 12, 20:47 [13411083] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
init.ora Member Откуда: гетто Сообщений: 317 |
а вообще решение явно не корректное, т.к. не задан способ сортировки для col2 |
1 ноя 12, 20:57 [13411101] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Testor1 Member Откуда: Сообщений: 679 |
Гавриленко Сергей Алексеевич, Спасибо за ценный ресурс. Указать в посте ссылку было бы более информативно, чем просто слово FAQ. |
1 ноя 12, 22:26 [13411321] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37202 |
|
||
2 ноя 12, 01:22 [13411819] Ответить | Цитировать Сообщить модератору |
init.ora Member Откуда: гетто Сообщений: 317 |
order by <что>?? order by col1,col2 ? order by col2,col1 ? на это стоит обращать внимание |
||
2 ноя 12, 21:16 [13416870] Ответить | Цитировать Сообщить модератору |
init.ora Member Откуда: гетто Сообщений: 317 |
в первом сообщении этого не было просто :D |
2 ноя 12, 21:17 [13416875] Ответить | Цитировать Сообщить модератору |
Testor1 Member Откуда: Сообщений: 679 |
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] Ответить | Цитировать Сообщить модератору |
SirMix Member Откуда: Киев Сообщений: 79 |
Testor1, немного оффтоп - мне такой вопрос задавали на собеседовании... ток сначала спросили просто запросом выдать через разделитель колонку, а потом то же самое, только с группировкой (один в один как ваш вопрос) - решил с помощью for xml path('') ![]() |
5 ноя 12, 15:41 [13422727] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |