Я пытаюсь научиться создавать соединения с T-SQL 2008 - PullRequest
2 голосов
/ 27 июня 2010

Я пытаюсь написать это предложение выбора.

Мое утверждение выбора состоит из объединения, которое возвращает все имена и фамилии моих вымышленных сотрудников, имена их отделов, и я пытаюсь сгруппировать людейих соответствующими отделами.Это код, который я написал:

select e.First_Name,e.Last_Name,Department_Name
from EMPLOYEES e
join DEPARTMENTS
on e.Department_Id = DEPARTMENTS.Department_Id
group by Department_Name

Это сообщение об ошибке, которое я получил:

Сообщение 8120, уровень 16, состояние 1, строка 1, столбец «EMPLOYEES.First_Name»недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Что лучше всего исправить эту ошибку?

Спасибо заваша помощь

Ответы [ 4 ]

1 голос
/ 27 июня 2010

При использовании группировки по столбцу / столбцам SQL суммируется по этому столбцу / столбцам.Недопустимо запрашивать / выбирать имя сотрудника на уровне отдела, потому что в данном отделе может быть много сотрудников.

Если вы хотите видеть сотрудников в каждом отделе, вам не нужна группа - вы можете вместо этогоиспользуйте порядок как ниже

 select e.First_Name,e.Last_Name,Department_Name 
from EMPLOYEES e join DEPARTMENTS on e.Department_Id = DEPARTMENTS.Department_Id order by Department_Name
0 голосов
/ 22 июля 2010

Когда вы используете предложение GROUP BY, оператор SELECT может содержать только столбцы, используемые в предложении GROUP BY, или агрегаты.

Если вы хотите сгруппировать по «Department_Name», каждый отдел отображается в виде одной строки в результате и поэтому не может содержать несколько имен сотрудников в одной строке.

Если вы хотите, чтобы имя, фамилия, название отдела ... в порядке их отделов ...

Вы должны GROUP BY все 3 столбца с именем Department_Name, являющимся первым

select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
group by e.First_Name,e.Last_Name,d.Department_Name

[ИЛИ] Вы можете использовать оператор ORDER BY .

select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
order by d.Department_Name
0 голосов
/ 27 июня 2010

Похоже, вы действительно ищете предложение order by.

SELECT 
    e.First_Name,
    e.Last_Name,
    d.Department_Name
FROM EMPLOYEES e
INNER JOIN DEPARTMENTS d
    ON e.Department_Id = d.Department_Id
ORDER BY Department_Name

В сообщении об ошибке содержится вся необходимая информация: сотрудник First_Name (и даже Last_Name в этом отношении) не включен в статистическую функцию или в предложение group by,Если бы вы включили First_Name и Last_Name в предложение group by, вы, скорее всего, не увидите никакой разницы, чем в исходном запросе, если у вас в отделе не будет больше одного человека с одинаковымимя и фамилия, как кто-то еще в том же отделе.В этом случае два набора будут сгруппированы в один результат в наборе результатов

0 голосов
/ 27 июня 2010

попробуйте

select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
group by e.First_Name,e.Last_Name,d.Department_Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...