С помощью этого кода SQL я хочу получить сумму чистых сумм по каждому номеру позиции отдельно:

myquery = "SELECT  distinct " & ItemNo & ", -SUM( " & NetAmount & " )   FROM " & table_TSE & _
    " WHERE " & ItemNo & " IN " & Itemnr1 & _
" AND [Date] BETWEEN '" & date_from & "' AND '" & date_to & "'"

Но я получил ошибку:

enter image description here

Как я могу это решить?

0
user17682095 26 Янв 2022 в 16:41
1
Ошибка довольно явная, все, что не используется в агрегатной функции в вашем выборе, должно быть сгруппировано.
 – 
Austin
26 Янв 2022 в 16:48

2 ответа

Вам нужно иметь предложение «GROUP BY» и «HAVING» в конце вместо «WHERE» при использовании агрегатных функций, таких как «SUM».

В предложении «GROUP BY» вы указываете столбцы, в которых нет функции «SUM».

Тогда подумайте о «HAVING» как о предложении «WHERE».

Я не тестировал, но это должно сработать:

myquery = "SELECT  DISTINCT" & ItemNo & ", -SUM( " & NetAmount & " )  FROM " & table_TSE & _
    " GROUP BY [Date]," & ItemNo & " HAVING " & ItemNo & " IN " & Itemnr1 & _
" AND [Date] BETWEEN '" & date_from & "' AND '" & date_to & "'"

Позвольте мне знать, если это помогает!

Вот хороший источник: https://www.w3schools.com/sql/sql_having.asp< /а>

0
Dovilian 26 Янв 2022 в 17:19
Теперь возникает ошибка: Столбец Trans_sales entry.Date недействителен в предложении HAVING, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
 – 
Ozzy
26 Янв 2022 в 16:59
Попробуйте добавить «[Date]» в предложение «GROUP BY».
 – 
Dovilian
26 Янв 2022 в 17:02
Если я добавляю даты, это работает, но у меня есть, например, 3 разные строки с одинаковым номером товара, но мне нужно получить одну строку для каждого номера товара с суммой всех сумм для этого товара.
 – 
Ozzy
26 Янв 2022 в 17:06
Возможно, вам придется удалить "DISTINCT". У вас есть пример вывода?
 – 
Dovilian
26 Янв 2022 в 17:20
Вывод выглядит следующим образом: 10472061 18,16528 10472061 37,98528 10472061 48,71792 10472061 56,16 20262878 82,64 20262878 213,22314 20262878 426,45
 – 
Ozzy
26 Янв 2022 в 17:25

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

Рассмотрите возможность изменения запроса, включив в него

" GROUP BY " & ItemNo &

Справочный пример: https://www.simplilearn.com/tutorials /sql-tutorial/sql-aggregate-functions#sum_function

0
James F 26 Янв 2022 в 17:47
Я также должен отметить, что «ГРУППИРОВАТЬ ПО» также сделает ваши результаты уникальными, так как все записи с этим номером элемента будут сгруппированы в одну строку.
 – 
James F
26 Янв 2022 в 17:50
Myquery = "ВЫБЕРИТЕ отдельные" & ItemNo & ", -SUM(" & NetAmount & ") FROM" & table_TSE & _ "WHERE" & ItemNo & "IN" & Itemnr1 & _ "И [Дата] МЕЖДУ '" & date_from & "' AND '" & date_to & _ "GROUP BY" & ItemNo & "'"
 – 
Ozzy
26 Янв 2022 в 17:56
Этот запрос по-прежнему имеет ту же ошибку, что и раньше
 – 
Ozzy
26 Янв 2022 в 17:56