Доброго времени суток!
Есть таблица со столбцами: ДАТА | ЮЗЕР | САЙТ
Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании GROUP BY ЮЗЕР на каком-то промежутке дат, т.е. что-то типа:
select ЮЗЕР, [САЙТы через запятую]
from ТАБЛИЦА
where ДАТА (не важно какое условие)
group by ЮЗЕР
Как такое сделать?
Здравствуйте, Аноним, Вы писали:
А>Есть таблица со столбцами: ДАТА | ЮЗЕР | САЙТ
А>Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании GROUP BY ЮЗЕР на каком-то промежутке дат, т.е. что-то типа:
А>А>select ЮЗЕР, [САЙТы через запятую]
А>from ТАБЛИЦА
А>where ДАТА (не важно какое условие)
А>group by ЮЗЕР
А>
А>Как такое сделать?
Это СУБД зависимая вещь.
В MSSQL
Использование операторов PIVOT и UNPIVOT
Здравствуйте, Аноним, Вы писали:
А>Надо объединить значения столбца САЙТ (например, через запятую) при выборке данных из таблицы при использовании 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
Как тут уже ответили — СУБД зависимая вещь.
Про MS SQL уже сказали, для Oracle см. справку по функциям wm_concat, listagg, xmlagg