Объединение значений столбца при GROUP BY
От: Аноним  
Дата: 16.10.13 08:14
Оценка:
Доброго времени суток!

Есть таблица со столбцами: ДАТА | ЮЗЕР | САЙТ

Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании GROUP BY ЮЗЕР на каком-то промежутке дат, т.е. что-то типа:
select ЮЗЕР, [САЙТы через запятую]
from ТАБЛИЦА
where ДАТА (не важно какое условие)
group by ЮЗЕР

Как такое сделать?
Re: Объединение значений столбца при GROUP BY
От: BlackEric http://black-eric.lj.ru
Дата: 16.10.13 08:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть таблица со столбцами: ДАТА | ЮЗЕР | САЙТ


А>Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании GROUP BY ЮЗЕР на каком-то промежутке дат, т.е. что-то типа:

А>
А>select ЮЗЕР, [САЙТы через запятую]
А>from ТАБЛИЦА
А>where ДАТА (не важно какое условие)
А>group by ЮЗЕР
А>

А>Как такое сделать?

Это СУБД зависимая вещь.
В MSSQL Использование операторов PIVOT и UNPIVOT
https://github.com/BlackEric001
Re: Объединение значений столбца при GROUP BY
От: Olaf Россия  
Дата: 16.10.13 10:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании GROUP BY ЮЗЕР на каком-то промежутке дат, т.е. что-то типа:


В T-SQL (SQL Server 2005+) можно использовать коррелированный подзапрос с for xml для объединения нескольких значений через разделитель…...
declare @dtbegin datetime
declare @dtend datetime

set @dtbegin = '2013-02-03'
set @dtend = '2013-02-05'

;with cte as
(
     select 'rambler.ru' as site, 1 as iduser, convert(datetime, '2013-02-01', 104) as dt union all
     select 'yandex.ru' as site, 1 as iduser, '2013-02-03' as dt union all
     select 'mail.ru' as site, 2 as iduser, '2013-02-04' as dt union all
     select 'google.com' as site, 2 as iduser, '2013-02-05' as dt union all
     select 'rambler.ru' as site, 3 as iduser, '2013-02-06' as dt union all
     select 'microsoft.com' as site, 2 as iduser, '2013-02-07' as dt union all
     select 'gazeta.ru' as site, 1 as iduser, '2013-02-03' as dt
)
select t1.iduser
       ,(select t2.site + ',' from cte t2 where t1.iduser = t2.iduser and t2.dt between @dtbegin and @dtend for xml path('')) as data
from cte t1
where t1.dt between @dtbegin and @dtend
group by t1.iduser
Re: Объединение значений столбца при GROUP BY
От: Dym On Россия  
Дата: 16.10.13 10:43
Оценка:
Как тут уже ответили — СУБД зависимая вещь.
Про MS SQL уже сказали, для Oracle см. справку по функциям wm_concat, listagg, xmlagg
Счастье — это Glück!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.