SQL Server: GROUP BY Семантика агрегации с оператором PIVOT - PullRequest
1 голос
/ 21 января 2010

Я нахожусь на SQL Server 2008, и у меня есть таблица, содержащая метрики WA следующей формы:

CREATE TABLE #VistitorStat
(
    datelow datetime,
    datehigh datetime,
    name varchar(255),
    cnt  int
)

Данные за два дня в таблице выглядят так:

2009-07-25 00:00:00.000 2009-07-26 00:00:00.000   New Visitor       221
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000   Unique Visitors   225
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000   Return Visitors   0
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000   Repeat Visitors   22
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000   New Visitor       263
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000   Unique Visitors   269
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000   Return Visitors   4
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000   Repeat Visitors   38

Я хочу сгруппировать по дням и перевести метрики в строку. Примеры использования оператора PIVOT, которые я могу найти, показывают только агрегацию на основе функции агрегирования SUM и MAX. Предположительно мне нужно передать семантику GROUP BY оператору PIVOT - примечание: я не могу найти никаких четких примеров / документации о том, как этого добиться. Может кто-нибудь опубликовать правильный синтаксис этого - с использованием оператора PIVOT - этого запроса.

Если это невозможно с помощью pivot - можете ли вы придумать элегантный способ написания запроса? Если нет, то мне просто нужно сгенерировать данные в транспонированном виде.

Редактировать сообщение ответа:

Я пришел к выводу, что оператор разворота является нелегким (настолько, что я считаю это синтаксическим взломом) - я решил проблему, создав данные транспонированным образом. Я приветствую комментарии.

1 Ответ

1 голос
/ 21 января 2010

Я не уверен в желаемом результате, но это дает строку в день:

CREATE TABLE #VistitorStat
(
 datelow datetime,
 datehigh datetime,
 name varchar(255),
 cnt  int
)


insert into #VistitorStat
      select  '2009-07-25 00:00:00.000','2009-07-26 00:00:00.000',   'New Visitor',       221 
union select  '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000',   'Unique Visitors',   225
union select  '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000',   'Return Visitors',   0
union select  '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000',   'Repeat Visitors',   22
union select  '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000',   'New Visitor'    ,   263
union select  '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000',   'Unique Visitors',   269
union select  '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000',   'Return Visitors',   4
union select  '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000',   'Repeat Visitors',   38


select * from #VistitorStat 
pivot (
    sum(cnt)
    for name in ([New Visitor],[Unique Visitors],[Return Visitors], [Repeat Visitors])

) p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...