Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Запутался совсем!!!
есть две таблицы: в одной
номер отдела(DNum)
название отдела(DName)
размещение отдела(DLoc)

DNum DName DLoc
1 11 M NY
2 22 P LOS
3 33 N W


вторая таблица
главный столбец что нам нужен DNum
делаю по данному столбцу COUNT

SELECT count(*) DNum_CUONT
FROM EMP
group by DNum

получаем результат, что у нас в
каждом отделе работает соответсвующее количество людей
DNum DNum_CUONT
11 5
22 5
33 1


как объединить эти два запроса вместе
чтоб в таблице один последним полем было количество сотрудников в каждом отделе

DNum DName DLoc DNum_CUONT
1 11 M NY 5
2 22 P LOS 5
3 33 N W 1
17 фев 14, 15:20    [15577755]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
mevmix
как объединить эти два запроса вместе

c помощью JOIN
17 фев 14, 15:21    [15577761]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
с помощью JOIN говорит

Вложенный запрос вернул больше одного значения
17 фев 14, 15:30    [15577838]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
mevmix
с помощью JOIN говорит

Вложенный запрос вернул больше одного значения

ну, так покажите как вы сделали?
17 фев 14, 15:32    [15577856]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,
select * from DPTO JOIN EMP
ON DPTO.DNum = (
SELECT count(*) DNum_CUONT
FROM EMP
group by DNum )
17 фев 14, 15:32    [15577860]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
mevmix
Glory,
select * from DPTO JOIN EMP
ON DPTO.DNum = (
SELECT count(*) DNum_CUONT
FROM EMP
group by DNum )

А зачем вложенный запрос после = ?
17 фев 14, 15:36    [15577901]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
elect * from DPTO JOIN EMP ON DPTO.DNum = EMP.DNum
17 фев 14, 15:36    [15577908]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,
]
мне надо выдать количество сотрудников в данном отделе
17 фев 14, 15:41    [15577948]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
mevmix
мне надо выдать количество сотрудников в данном отделе

Ну так допишите в это запрос группировку и агрегатную функцию
17 фев 14, 15:42    [15577958]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,

в данном случае просто выдаст 4 столбца и всех сотрудников из второй таблицы

по итогде должно быть всего 3 строки как в моем примере с послденим столбцом, в котором
указано количество сотрудников
1 первой строке в данном отделе работает 5 человек
17 фев 14, 15:42    [15577960]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory, надо через подзапрос

Показать все отделы и количество сотрудников в каждом отделе (псевдостолбец-подзапрос, псевдонимы столбцов, групповая функция COUNT

через агрегатную и групировку не выходит

вот пример запроса как пишу
SELECT [user01].[DEPT].*, COUNT(user01.[EMP].DEPTNO) as people
  FROM [user01].[DEPT] JOIN [user01].[EMP]
  ON [user01].DEPT.DEPTNO = [user01].EMP.DEPTNO
  group by user01.[EMP].DEPTNO
17 фев 14, 15:51    [15578039]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
mevmix
вот пример запроса как пишу

Учитесь вместо * писать имена полей
А также читать сообщение об ошибках
В данном случае - сообщение о том, где и какие поля должны быть перечислены

mevmix
надо через подзапрос

Показать все отделы и количество сотрудников в каждом отделе (псевдостолбец-подзапрос, псевдонимы столбцов, групповая функция COUNT

Ну так и пишите "псевдостолбец-подзапрос"
Он должен находится в перечне SELECT, а не где-то еще
17 фев 14, 16:00    [15578093]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
У вас 2 таблицы, одна список отделов вторая список людей по отделам? и в результате надо получить список отделов с количеством работников ?
SELECT [user01].[DEPT].FIELD1....FIELD(N)  , COUNT(*) as people
  FROM [user01].[DEPT] INNER JOIN [user01].[EMP]
  ON [user01].DEPT.DEPTNO = [user01].EMP.DEPTNO
  group by  [user01].[DEPT].FIELD1....FIELD(N) 


где [user01].[DEPT].FIELD1....FIELD(N) список полей таблицы DEPT
17 фев 14, 16:01    [15578101]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,

да одна таблица три столбца
DEPTNO, DNAME, LOC это таблица [user01].[DEPT]

вторая таблица в ней больше столбцов
EMPNO ,MGR , ENAME, HIREDATE, SAL, COMM, JOB_ID, DEPTNO(таблица EMP),
но нам надо только одно посчитать количество, по отделам в данном случае это EMP.DEPTNO
делаем по нему COUNT получаем результат что в 10 отделе(столбец EMP.DEPTNO) работает 5 человек

и вот как это все объединить через псевдостолбец-подзапрос
в таком раскладе все гуд показывает, но не количество а просто объединяет столбцы

USE TestDB
SELECT user01.DEPT.DEPTNO,user01.DEPT.DNAME,user01.DEPT.LOC,user01.EMP.DEPTNO
  FROM user01.DEPT JOIN user01.EMP
  ON user01.DEPT.DEPTNO=user01.EMP.DEPTNO 


и все время ругается что запрос вернул больше одного значения, так тоже не хочет
я весь мозг уже сломал себе

SELECT  user01.DEPT.DEPTNO,
		user01.DEPT.DNAME,
		user01.DEPT.LOC,
		(select count(isnull(user01.EMP.DEPTNO, 0))from user01.EMP group by user01.EMP.DEPTNO)as people
  FROM user01.DEPT JOIN user01.EMP
  ON user01.DEPT.DEPTNO=user01.EMP.DEPTNO 
17 фев 14, 16:17    [15578239]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
реально просто запутался уже не вижу очевидного((((
17 фев 14, 16:18    [15578248]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
select Count(E.*) as [Кол-во сотрудников], E.DEPTNO from user01.EMP E GROUP BY E.DEPTNO 


что вернёт?
17 фев 14, 16:20    [15578269]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Glory
Member

Откуда:
Сообщений: 104751
mevmix
и вот как это все объединить через псевдостолбец-подзапрос

Для начала надо понять, что соединение с группировкой и псевдостолбец-подзапрос - это два _разных_ решения
Потом выбрать одно из решений
Потому уже реализовать решение
17 фев 14, 16:21    [15578270]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
mevmix,

равнозначно данному запросу
select count(isnull(user01.EMP.DEPTNO, 0))
						from user01.EMP 
						group by user01.EMP.DEPTNO
17 фев 14, 16:22    [15578279]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
SELECT  user01.DEPT.DEPTNO,
		user01.DEPT.DNAME,
		user01.DEPT.LOC,
		CNTPEOPLE
  FROM user01.DEPT INNER JOIN (select DEPTNO, count(isnull(user01.EMP.DEPTNO, 0)) AS CNTPEOPLE from user01.EMP group by user01.EMP.DEPTNO)as people
  ON user01.DEPT.DEPTNO=people.DEPTNO


Вот так
17 фев 14, 16:24    [15578291]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
задам вопрос по другому:
у вас в таблице user01.EMP есть значения с DEPTNO = NULL ?
17 фев 14, 16:24    [15578294]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Stanislav,

вот так сработало, но выкинулу 40 отдел в котором нет сотрудников
17 фев 14, 16:26    [15578310]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Konst_One,

да есть
17 фев 14, 16:27    [15578312]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
LEFT OUTER JOIN 
17 фев 14, 16:27    [15578317]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
Konst_One,

теперь все работает, но по данному запросу осталось куча вопросов
буду сидеть разбираться
Всем спасибо
17 фев 14, 16:31    [15578352]     Ответить | Цитировать Сообщить модератору
 Re: отделы и количество сотрудников в каждом отделе + COUNT  [new]
mevmix
Member

Откуда:
Сообщений: 56
есть ли еще как варианты решения данного вопроса?
18 фев 14, 11:58    [15581360]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить