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

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

Пытаюсь на MS SQL 2008 R2 реализовать запрос с использованием нескольких агрегатов в PIVOT, как описано в статье тут:

http://aboutit-and-aroundit.blogspot.ru/2011/10/pivot.html

не получается...
Это вообще должно на MS SQL работать или столбец статистический может быть только один?

такое работает:

select *
from h
pivot
(
max(parentdescr)
for h.level in ([1], [2], [3])
) p

а такое, с вариациями, уже нет:

select *
from h
pivot
(
max(parentcode) parentcode
max(parentdescr) parentdescr
for h.level in ([1] L1, [2] L2, [3] L3)
) p
3 май 14, 12:36    [15966106]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
А это что такое во втором запросе?

 for h.level in ([1] L1, [2] L2, [3] L3) 
3 май 14, 12:43    [15966129]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
ну и конечно запятую между двумя полями неплохо бы поставить
3 май 14, 12:45    [15966136]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Во втором запросе - алиасы согласно статье, чтобы результирующие колонки парами именовались.
Запятую и ставил и не ставил, все равно не выводит.
Я так понимаю что такое принципиально не реализовано.
3 май 14, 12:49    [15966147]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
База то у вас какая?
MSSQL или Oracle?
3 май 14, 12:52    [15966161]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
Не смущает надпись внизу страницы
Ярлыки: Oracle, PIVOT, SQL
?
3 май 14, 12:55    [15966171]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Надпись смущает, но задача актуальна потому и решил попробовать.
3 май 14, 12:56    [15966172]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Вжик,

а ничего, что по Вашей ссылке обсуждается Oracle?
Делайте так, как там описано в самом начале (Без использования PIVOT).
Зачем вообще нужен PIVOT? Не понимаю.
3 май 14, 13:04    [15966196]     Ответить | Цитировать Сообщить модератору
 Re: Использование нескольких агрегатов в PIVOT  [new]
Вжик
Member

Откуда: Москва
Сообщений: 676
Ну мало ли, я с PIVOT не работал до сих пор, вот решил попробовать...
Как в начале - так и сделал, но получается громоздко и не красиво, но видимо иначе никак:

with h (id, code, descr, parentid, parentcode, parentdescr, level) as
(
select t.id, t.code, t.descr, t.parentid, parentt.code, parentt.descr, 1
from SC592 t
left join SC592 parentt on
t.parentid = parentt.id
where t.parentid = ' 0 '

union all

select t.id, t.code, t.descr, t.parentid, h.code, h.descr, (level + 1)
from SC592 t
join h on h.id = t.parentid
)

select id, code, descr,
-- l1
case level
when 1 then parentid
else null
end id_l1,
case level
when 1 then parentcode
else null
end code_l1,
case level
when 1 then parentdescr
else null
end descr_l1,
-- l2
case level
when 2 then parentid
else null
end id_l2,
case level
when 2 then parentcode
else null
end code_l2,
case level
when 2 then parentdescr
else null
end descr_l2,
-- l3
case level
when 1 then parentid
else null
end id_l3,
case level
when 1 then parentcode
else null
end code_l3,
case level
when 1 then parentdescr
else null
end descr_l3
from h
3 май 14, 13:09    [15966205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить