2015-10-26 3 views
0

получаю эту ошибкуUpdate Temp Таблица с Группировать

Msg 157, Level 15, State 1, Line 20
Агрегат может не отображаться в списке множества оператора UPDATE.

Мой UPDATE заявление:

UPDATE #Results 
SET CustomerName = dbo.GetCustomerNameByCustomerId(CustomerId), 
    TotalIncremental = Sum(IncrementalDollarsDebitCredit), 
    TotalDeficiency = 0 
FROM 
    IncrementalCreditHeader ICH 
INNER JOIN 
    IncrementalCreditHistory IC ON IC.IncrementalCreditID = ICH.IncrementalCreditID 
WHERE 
    IC.BillingPeriodStartDate < = '2015-07-01 00:00:00.000' 
    AND ICH.ARCreatedFlag = 'Y' AND ICH.ActiveFlag = 1 
+0

Почему вы не хотите использовать GROUP BY? –

+1

У вас должно быть # Результаты в вашем запросе на обновление. Будьте осторожны с этими скалярными функциями, они могут серьезно помешать работе. Особенно что-то простое, как это звучит. Кажется, что, возможно, вы используете скалярную функцию вместо того, чтобы добавлять еще одно соединение к вашему запросу. –

+0

для группы обновлений не работает ... как я могу изменить этот запрос, чтобы получить результат – user1030181

ответ

0

в общем, вы можете использовать тот факт, что вы можете обновить common table expressions в сервере SQL + применить функцию окна, как это:

create table temp (client_id int, amount int, total_amount int) 

insert into temp (client_id, amount) 
select 1, 10 union all 
select 1, 15 union all 
select 2, 5 union all 
select 2, 7 union all 
select 2, 15 

;with cte as (
    select total_amount, sum(amount) over(partition by client_id) as new_total_amount 
    from temp 
) 
update cte set 
    total_amount = new_total_amount 

-------------------------------- 
client_id amount total_amount 
     1  10   25 
     1  15   25 
     2  5   27 
     2  7   27 
     2  15   27 

sql fiddle demo

Но в вашем вопросе вам нужно добавить таблицу #Results в ваш запрос на обновление, иначе для SQL Server не ясно, какие строки обновлять