2015-04-15 3 views
0

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

У меня есть 2 таблицы:

Employee_Table (Employee_Number, Employee_Name, Department_Number) 
Department (Department_Number, Department_Name) 

Это мой SQL-код:

SELECT ET.Department_Number,ET.Employee_Name 
FROM dbo.Employee_Table ET 
GROUP BY ET.Department_Number,ET.Employee_Name 
HAVING COUNT(ET.Department_Number) >= 3 

, но ничего не отображается, если я бегу:

SELECT ET.Department_Number 
FROM dbo.Employee_Table ET 
GROUP BY ET.Department_Number 
HAVING COUNT(ET.Department_Number) >= 3 

У меня есть правильный результат, это 101 и 105, но в сочетании с Employee_Name я не могу получить правильный результат.

+1

Ну, что именно вы хотите получить в 'столбце ET.Employee_Name' (то есть, в какой форме, потому что она должна быть какая-то агрегированных данных, в противном случае вы должны присоединиться к полученному 'select' с таблицей, чтобы получить' Employee_Name')? – potashin

+0

удалите «наличие счета» и посмотрите, что отображается, когда вы группируете имя сотрудника –

+1

Вы ищете MySQL или Microsoft SQL Server? – tadman

ответ

0
SELECT 
ET.Department_Number, 
ET.Employee_Name 
FROM Employee_Table ET 
WHERE Department_Number IN 
( SELECT Department_Number 
    FROM Employee_Table 
    GROUP by Department_Number 
    HAVING COUNT(*) >= 3 
) 
+0

Это сработало! Большое вам спасибо :)), я застрял на этой части, как 2 часа: D –

+0

Добро пожаловать :-) удачи в вашем проекте – Alex

0

В SQL Server я бы использовал CTE и JOIN.

WITH Departments AS (
    SELECT ET.Department_Number 
    FROM dbo.Employee_Table ET 
    GROUP BY ET.Department_Number 
    HAVING COUNT(ET.Department_Number) >= 3 
) 

SELECT D.Department_Number, ET.Employee_Name 
FROM dbo.Employee_Table ET 
JOIN Departments ON ET.Department_Number = D.Department_Number 
ORDER BY D.Department_Number 

Как это выглядит?

0

В этом случае вам нужен подзапрос, чтобы получить отделы, имеющие счет 3 или более сотрудников. Это должно сделать трюк:

SELECT 
ET.Department_Number, 
ET.Employee_Name 
FROM dbo.Employee_Table ET 
join 
( Select department_number, count(department_number) 
    from dbo.Employee_Table 
    group by department_number 
    HAVING COUNT(Department_Number) >= 3 
) dept_having_3 
on et.department_number = dept_having_3.department_number 
Смежные вопросы