Я пытаюсь создать запрос для отображения определенных данных в определенной группе и порядке. Единственная проблема, которая у меня есть, заключается в том, что для получения правильного порядка данных в столбцах мне нужно упорядочить их по столбцу, который я не ВЫБРАН и не хочу отображать.
Поэтому, когда я пытаюсь ORDER BY этого столбца, я получаю сообщение об ошибке:
«Столбец ** недопустим в предложении ORDER BY, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY».
Есть ли синтаксис, который позволит мне это сделать? Вот запрос, с которым я работаю:
select Pr.EmployeeNo as EmpNo, EmployeeFName as EmpFName, EmployeeLName as EmpLName,
ProjectName, ProjectStartDate as ProjStartDate, JobName as Job, JobRate, HoursWorked as Hours
from Employee as Em join ProjEmp as Pr on Em.EmployeeNo = Pr.EmployeeNo
join Project as Pt on Pr.ProjectID = Pt.ProjectID
join Job as Jb on Em.JobID = Jb.JobID
Group by Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked
@нбк. Order BY не был в примере, потому что столбца, по которому мне нужно было упорядочить, не было в Select или GROUP BY. Я понял, что могу заказать столбец, если добавлю его в GROUP BY.
БУНА НЕТ. В этом случае существует исключение, когда используется предложение GROUP BY, а предложение ORDER BY позволяет группировать по столбцам и функциям.
Я ПОНЯЛ ЭТО примерно через 4 минуты после публикации вопроса и ответил на него ниже. Однако спасибо за ваш вклад. Я просто два дня не могу пометить свой ответ как ответ... Возможно, мод мог бы сделать это быстрее?
@ArthwysIronhand - модераторы не могут помечать ответы как принятые. Вы оценили, отвечает ли другой опубликованный ответ на вопрос и должен ли он быть выбран в качестве принятого ответа в любом случае? Он был опубликован до вашего и на первый взгляд кажется более полным, так почему вы хотите выбрать именно свой?
Остановитесь и прочитайте полную ошибку еще раз. Он точно говорит вам, что происходит. Подсказка: проблема не в том, что он отсутствует в предложении SELECT. Нет причин, по которым вы не можете сделать это:
SELECT ColumnA
FROM [Table1]
ORDER BY ColumnB
Проблема в том, что у вас есть пункт GROUP BY:
Column is invalid in the ORDER BY clause because it is not
contained in either an aggregate function or the GROUP BY clause.
И это имеет смысл. Скажем, у вас есть эта таблица:
А затем попробуйте запустить этот запрос:
SELECT ColumnA, MAX(ColumnB)
FROM [Table]
GROUP BY ColumnA
ORDER BY ColumnC
Этот запрос пытается выполнить ORDER BY ColumnC, но в каждой группе имеется более одного значения для ColumnC! У нас есть две группы в ColumnA: 1 и 2. Группа 1 имеет два значения «С»: 3 и 9. Группа 2 также имеет два значения «C»: 7 и 5. В зависимости от того, какие строки выбраны, вы можете получить разные порядки.
А вот с ColumnA все в порядке, потому что это часть выражения GROUP BY. Это означает, что мы знаем, какое значение использовать. MAX(ColumnB) тоже нормально, потому что MAX() — агрегатная функция. Он говорит нам, какое значение из группы использовать детерминированным образом. Но ссылка на ColumnC неоднозначна(!), и поэтому не разрешена.
Итак, в SQL из вопроса вы можете использовать любой из этих столбцов для предложения ORDER BY:
Pr.EmployeeNo, EmployeeFName, EmployeeLName, ProjectName, ProjectStartDate, JobName, JobRate, HoursWorked
Если вы хотите использовать другой столбец, вы должны либо изменить группировку (и тщательно продумать последствия), либо использовать агрегатную функцию для группы столбцов.
Спасибо за такой подробный ответ. Я писал свой собственный ответ, когда вы опубликовали это.
Я понял. Ответ заключался в том, чтобы добавить столбец в GROUP BY. Поскольку я не выбрал столбец, он не будет отображаться. НО ГРУППИРОВКА ПО столбцу позволяет мне ЗАКАЗАТЬ по нему, и он не будет отображаться, потому что на самом деле он не был ВЫБРАН.
Извините за беспокойство.
Что является правильным порядком, в котором у вас нет порядка в вашем запросе