2015-05-07 3 views
1

пример моей базы данных Progress, opdetail таблицыSQL Sum не возвращает правильные данные

 
invoice invline article size qty 
---------------------------------------- 
905155 1   Shoe  10  5 
905155 2   Slipper 3  2 
905155 2   Slipper 4  6 
905155 2   Slipper 5  1 
905156 1   Boot  10  1 
905156 1   Boot  11  1 
905157 1   Slipper 5  4  
905157 2   Shoe  8  6 

простого SQL оператор выбора, запустите из OpenEdge редактор возвращается только то, что мне нужно, список счетов-фактур с их общим количество: -

SELECT invoice, sum(qty) FROM opdetail GROUP BY qty ORDER BY invoice ASC 
 
905155 14 
905156 2 
905157 10 

ОДНАКО: - При запуске из страницы ASP с помощью DSN я должен перечислить оба поля в GROUP BY в противном случае прогресс возвращает GROUP BY ошибка

SELECT invoice, sum(qty) FROM opdetail GROUP BY qty, invoice ORDER BY invoice ASC 
 
905155 5 
905155 9 
905156 2 
905157 4 
905157 6 

Его не суммируя QTY, и, кажется, принимая во внимание номер строки, даже если номер строки не играет никакой роли в моем заявлении SQL. Может ли кто-нибудь пролить свет на это или как я могу сделать сумму общего количества с учетом номера строки? Благодаря!

+0

Вы можете уточнить, почему вы должны перечислить оба поля в 'group by'? Вы уверены, что Postgres жалуется на это? – Andomar

+0

Да, прогресс хотел, чтобы все выбранные поля перечислялись в GROUP BY, но, похоже, это не означает суммированные поля, поэтому теперь он работает. Спасибо за вашу помощь! –

ответ

3

Вы используете qty в агрегатной функции, а затем использовать на group by это не имеет никакого смысла, и вы должны group by на другой колонке что-то как

SELECT 
invoice, 
sum(qty) FROM opdetail 
GROUP BY invoice ORDER BY invoice ASC 
+0

Спасибо, решено! Сообщение об ошибке, которое я получал, было неоднозначным и предположило, что qty должно быть включено в GROUP BY, но это было не так, я должен был включить все выбранные поля в GROUP, за исключением суммированного поля! –