Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CROSS APPLY + GROUP BY + вызов функции  [new]
crossapply_groupby
Guest
Всем привет!

SELECT *
FROM #Dogovors d
CROSS APPLY (SELECT SUM(dbo.fGetCalcSum(d.IDDogovor,p.DateStart,p.DateFinish)) rez FROM Table1 p(nolock)
		    WHERE (d.IDDogovor = p.IDDogovor) AND p.DateStart>='20130701' and p.DateFinish<='20130731'
		    GROUP BY p.iddogovor
		    ) p


Для каждого d.IDDogovor - нужно вывести общую сумму.

Ругаемся:
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.


Что не так?
9 сен 13, 19:41    [14816220]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
crossapply_groupby
Guest
Можно сделать вот так, т.е. во внешнюю группировку:

SELECT SUM(dbo.fGetCalcSum(d.IDDogovor,p.DateStart,p.DateFinish))
FROM #Dogovors d
CROSS APPLY (SELECT p.DateStart,p.DateFinish FROM Table1 p(nolock)
		    WHERE (d.IDDogovor = p.IDDogovor) AND p.DateStart>='20130701' and p.DateFinish<='20130731'
		    GROUP BY p.iddogovor
		    ) p
GROUP BY d.IDDogovor


Условие такое что нужно вывести все поля из таблицы d и других таблиц, т.к. там цепляется еще много JOIN-ов
9 сен 13, 19:47    [14816241]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
Exproment
Member

Откуда:
Сообщений: 416
crossapply_groupby, вы формируете группу по p.iddogovor, при этом запрашиваете поля p.DateStart,p.DateFinish - какие по вашему значения он должен взять ? любые на рандом ? :)
9 сен 13, 19:48    [14816246]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31425
crossapply_groupby
Что не так?
GROUP BY d.IDDogovor, p.DateStart, p.DateFinish
9 сен 13, 20:07    [14816302]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
crossapply_groupby
Guest
SELECT *
FROM #Dogovors d
CROSS APPLY (SELECT SUM(dbo.fGetCalcSum(d.IDDogovor,p.DateStart,p.DateFinish)) rez FROM Table1 p(nolock)
		    WHERE (d.IDDogovor = p.IDDogovor) AND p.DateStart>='20130701' and p.DateFinish<='20130731'
		    GROUP BY d.IDDogovor, p.DateStart, p.DateFinish
		    ) p


Итог всё равно один:
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.
10 сен 13, 11:07    [14818415]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
SELECT *,
(SELECT SUM(dbo.fGetCalcSum(p.IDDogovor,p.DateStart,p.DateFinish)) rez FROM Table1 p(nolock)
		    WHERE (d.IDDogovor = p.IDDogovor) AND p.DateStart>='20130701' and p.DateFinish<='20130731'
) as x
FROM #Dogovors d
10 сен 13, 11:13    [14818446]     Ответить | Цитировать Сообщить модератору
 Re: CROSS APPLY + GROUP BY + вызов функции  [new]
crossapply_groupby
Guest
Спасибо, Glory!
10 сен 13, 12:53    [14819440]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить