2016-10-10 6 views
0

Я пытаюсь этот код:Sum Sql колонна с присоединиться

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 

я получаю сообщение об ошибке:

Msg 8118, Level 16, State 1, Line 1 Column 'C.CustomerNum' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

+0

Что вы хотите, чтобы SUM основывался? Ошибка является само собой разумеющейся – techspider

+0

Для получения моих общих очков в одной строке – user6927546

+0

Возможный дубликат [Причина для столбца недействительна в списке выбора, потому что она не содержится ни в агрегатной функции, ни в предложении GROUP BY] (http: // переполнение стека.com/questions/13999817/reason-for-column-is-invalid-in-the-select-list-because-it-is-not-contains-in-e) – techspider

ответ

0

Если у вас есть сводный (SUM, COUNT, AVERAGE), вам нужно сгруппировать свой запрос всеми возвращаемыми неагрегатными столбцами. Для этого:

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 
Group By C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
0

Сообщение об ошибке кладет ее. Вы можете сделать это (выбрать только агрегаты без группы по):

Select Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 

или это (выбрать агрегат и столбцы, если столбцы в группе):

Select C.CustomerNum 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x' 
group by c.customernum 

, но не это (выбор агрегатов и столбцы без группы по):

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 
+0

Не работает второй случай, ни я не принимаю то же сообщение об ошибке – user6927546

+0

Я не добавлял, каков ваш запрос. Просто попробуйте объяснить сообщение об ошибке. Проверьте чужой ответ для решения для копирования/вставки. – Malk

0

При использовании агрегатной функции, необходимо использовать GROUP BY. Попробуйте следующее:

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 
GROUP BY C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 

Теперь вы, вероятно, захотите сузить то, что вы на самом деле хотите выбрать. Например, лучше всего просто сгруппировать по C.Surname или C.CustomerNum

+0

Спасибо, что это работает – user6927546

0

Вы не можете использовать агрегатную функцию (в данном случае SUM()) с другими необобщенными колоннами без использования GROUP BY. Тем не менее, вы можете сделать это, делая это оконный SUM() функции:

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) Over (Partition By C.CustomerNum) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x'; 

Но, возможно, вы желающий группировать их по CustomerNum, Coupon, Name и Surname, в этом случае, вам просто нужно добавить a GROUP BY:

Select C.CustomerNum 
     , C.Coupon 
     , C.name 
     , C.Surname 
     , Sum(P.Points) 
From customers C 
Join Points P 
     On P.CustomerNum = C.CustomerNum 
Where C.Coupon = 'xxx-xxx-xxx-x' 
Group By C.CustomerNum, C.Coupon, C.Name, C.Surname 
1

Вы также можете использовать.

SELECT C.CustomerNum, 
     C.Coupon, 
     C.name, 
     C.Surname, 
     P.Points 
FROM customers C 
     INNER JOIN (SELECT Sum(Points) AS Points, 
            CustomerNum 
        FROM Points 
        GROUP BY CustomerNum) P 
     ON P.CustomerNum = C.CustomerNum 
WHERE C.Coupon = 'xxx-xxx-xxx-x'; 

Чтобы избежать того, чтобы добавить все выбранные столбцы из customers в GROUP BY списке.

0

@ User6927546

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

выберите employee.empId, employee.Name, сумма (w.workcode) от сотрудника присоединиться работы W на employee.workId = w.id где employee.Name = 'Anoop'

Я получаю результирующий набор as: empId Сумма имени (w.workcode) 1 Anoop 200