Агрегат может не отображаться в предложении WHERE, если он не входит в подзапрос, содержащийся в предложении HAVING - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь создать запрос, который группирует и суммирует два разных поля для одного и того же идентификатора. Затем я пытаюсь извлечь только те записи, которые отличаются в том случае, если сгруппированное итоговое значение отличается от итогового итогового значения.

Например - сумма ([EstimatedEmployeesAtLocation]) должна равняться сгруппированному Estimatedtotalemployees, одинаковому для каждогозапись.

Вот как будут выглядеть три записи

ID                            1,1,1
Estimatedtotalemployees       10,10,10
EstimatedEmployeesAtLocation  6,2,1

Я знаю, что проблема заключается в использовании агрегатной функции в предложении where, потому что запрос работает, пока я не добавлю кудапункт. Но я не знаю правильный синтаксис. Кто-то может посоветовать, пожалуйста?

select ID, Estimatedtotalemployees, sum([EstimatedEmployeesAtLocation]) emploc
from Rawdata
where sum([EstimatedEmployeesAtLocation]) <> EstimatedTotalEmployees
group by policyNumber, EstimatedTotalEmployees

Это сообщение об ошибке. Агрегат может не отображаться в предложении WHERE, если он не входит в подзапрос, содержащийся в предложении HAVING или списке выбора, а столбец агрегируется. это внешняя ссылка. Я только начинаю использовать SQL помимо базовых запросов, поэтому любая помощь очень ценится -

1 Ответ

0 голосов
/ 17 октября 2019

SQL оцениваются примерно в следующем порядке:

  • FROM - данные объединяются
  • WHERE - данные фильтруются
  • GROUP BY - данныеагрегируется
  • SELECT - создается набор результатов

Нельзя использовать SUM (...) в предложении WHERE, поскольку оно еще не было вычислено;это делается как часть GROUP BY и SELECT

У вас также не может быть идентификатора в списке выбора, поскольку вы не сгруппированы по нему.

Возможно, вам лучше задать новыйзадайте вопрос / отредактируйте некоторые детали в этом документе, в котором указано, какие необработанные данные у вас есть (и, пожалуйста, поместите их с колонками вверху, строками вниз, как показывает SSMS), что вы пробовали (например, приведенный выше sql) и чтоВаш желаемый результат (опять же, строки располагаются горизонтально, а столбцы - вертикально, в противном случае кто-то в конечном итоге даст вам разворот). Прямо сейчас вы, кажется, дали необработанные данные, но отметили их как данные результата, и они выглядят неправильно, поэтому я не уверен, нужно ли это вращать или нет

Вот мой лучший удар в том, чтоВы после:

select ID, MAX(Estimatedtotalemployees), SUM([EstimatedEmployeesAtLocation]) 
from Rawdata
group by ID
having SUM([EstimatedEmployeesAtLocation]) <> MAX(EstimatedTotalEmployees)
...