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

Откуда: Тольятти
Сообщений: 454
Добрый день!

Нужна помощь в написании запроса. Имеем:
SELECT pgName, PComp.ID AS pcID, pcName, PComp.pgiID, sumComp
    FROM PComp WITH(noLock)
        INNER JOIN PGroup WITH(noLock) ON PGroup.pgiID = PComp.pgiID
        CROSS APPLY (SELECT SUM(dbo.Cena(Comp.toID, 0, PGroup.pgNadb, 0, 1)) As [sumComp] FROM Comp WITH(noLock) WHERE Comp.pcID = PComp.ID) crossApply
    ORDER BY pgName, pcName;


Выдаёт ошибку:
Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.


Ругается на PGroup.pgNadb.

Как можно изменить запрос, чтобы он заработал?
15 дек 16, 12:20    [20006456]     Ответить | Цитировать Сообщить модератору
 Re: Cross Apply и Group  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
saszay,

выглядит всё это извращённо, но перенесите свой INNER JOIN PGroup в CROSS APPLY
15 дек 16, 12:27    [20006493]     Ответить | Цитировать Сообщить модератору
 Re: Cross Apply и Group  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
saszay
Добрый день!
Выдаёт ошибку:
Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.


Ругается на PGroup.pgNadb.

Как можно изменить запрос, чтобы он заработал?

Нельзя в CROSS APPLY использовать в агрегатах внешний столбец. От слова совсем.
А еще вы думаете, что мы должны угадывать код вашей функции dbo.Cena и вообще, структуру используемых таблиц.
Поэтому данное решение возможно подтолкнет вас к размышлению о бренности вашего кода и смысла работы:
WITH
p AS (
  SELECT
    t.[phrase],
    [word] = s.[g0]
  FROM
    ( SELECT
      [phrase] = 'THE BROWN FOX JUMPING OVER THE LAZY DOG'
    ) t
    CROSS APPLY [rx].[split]( 'THE BROWN FOX JUMPING OVER THE LAZY DOG', ' ', 'i', 0, 0, 0 ) s
)
SELECT
  phrase,
  MAX( [dbo].[capitalize_words]( [word] ) )
FROM
  p
GROUP BY
  [phrase]
15 дек 16, 12:37    [20006545]     Ответить | Цитировать Сообщить модератору
 Re: Cross Apply и Group  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
Перепишите обычным образом через select sum() ... group by ...
cross apply тут не нужен.
15 дек 16, 12:40    [20006554]     Ответить | Цитировать Сообщить модератору
 Re: Cross Apply и Group  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
invm
Перепишите обычным образом через select sum() ... group by ...
cross apply тут не нужен.


СПАСИБО, помогло
15 дек 16, 12:43    [20006566]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить