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

Откуда:
Сообщений: 535
Добрый день, господа. Столкнулся с непонятной мне ситуацией. Припустим есть некая таблица:
declare @rest table ( rowId      int
,                     columnId int
,                     f1   numeric(14,3) 
,                     f2   numeric(14,3) )


Хочу сформировать pivot по полю rowId, котором полями columnId с сумами по полю f1. Поле f2 не интересует и не должно влиять на pivot, но в рабочей задаче поле F2 заполнено разными значениями и почему-то влияет на построение пивот по полю f1. Вот скрипт pivot:
declare @rest table ( rowId      int
,                     columnId int
,                     f1   numeric(14,3) 
,                     f2   numeric(14,3) )
insert into @rest values ( 400707, 76004, 320.000,	1 )
insert into @rest values ( 400707, 76009, 91.000,	1 )
insert into @rest values ( 400707, 0,	  411.000,	1 )
select * from @rest

select rowId,[0],[76004],[76009] from @rest
 pivot( sum(f1) for  columnId in ([0],[76004],[76009]) ) as pv

delete @rest
insert into @rest values ( 400707, 76004, 320.000,	1 )
insert into @rest values ( 400707, 76009, 91.000,	2 )
insert into @rest values ( 400707, 0,	  411.000,	3 )

select * from @rest

select rowId,[0],[76004],[76009] from @rest
 pivot( sum(f1) for  columnId in ([0],[76004],[76009]) ) as pv

результат:
Картинка с другого сайта.

В скрипте для построения pivot поле f2 нигде не используется, почему оно влияет на результат? Выход я нашел - скопировать данные во временную таблицу без поля F2, но как-то странно получается, лишнее движение.

К сообщению приложен файл. Размер - 47Kb
15 дек 15, 11:43    [18561706]     Ответить | Цитировать Сообщить модератору
 Re: Поле, не участвующее в запросе pivot влияет на его результат  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
select rowId,[0],[76004],[76009]
from
  (
    select rowId,columnId,f1 -- оставляем только необходимое
    from @rest
  ) q
pivot( sum(f1) for  columnId in ([0],[76004],[76009]) ) as pv -- потом делаем pivot
15 дек 15, 11:52    [18561753]     Ответить | Цитировать Сообщить модератору
 Re: Поле, не участвующее в запросе pivot влияет на его результат  [new]
Glory
Member

Откуда:
Сообщений: 104751
select rowId,[0],[76004],[76009] from 
(select rowId,columnId,f1 from @rest) as src
 pivot( sum(f1) for  columnId in ([0],[76004],[76009]) ) as pv
15 дек 15, 11:53    [18561756]     Ответить | Цитировать Сообщить модератору
 Re: Поле, не участвующее в запросе pivot влияет на его результат  [new]
Glory
Member

Откуда:
Сообщений: 104751
Zukora
В скрипте для построения pivot поле f2 нигде не используется, почему оно влияет на результат?

Потому, что при агрегировании все выбранные поля должны либо попасть в функцию агрегирования, либо в условие агрегирования
15 дек 15, 11:54    [18561765]     Ответить | Цитировать Сообщить модератору
 Re: Поле, не участвующее в запросе pivot влияет на его результат  [new]
Zukora
Member

Откуда:
Сообщений: 535
Блин :) Glory, Leran2002 - большое спасибо.
15 дек 15, 11:55    [18561767]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить