Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка и подзапросы  [new]
eXeLe
Member

Откуда:
Сообщений: 65
есть запрос, который считает кол-во выполненных работ по пользователям:
SELECT	ORGANIZATION_ID, FIO,
		(SELECT FULL_NAME FROM ORGANIZATIONS c WHERE c.ORGANIZATION_ID=u.ORGANIZATION_ID) AS 'Название организации',
		(SELECT COUNT(t.TASK_ID) FROM TASK t WHERE t.USER_ID=u.USR_ID) AS 'Кол-во выполненных работ',
FROM usr u
WHERE ORGANIZATION_ID>0


работает нормально, но если попытаться сделать группировку по организациям:
SELECT	ORGANIZATION_ID,
		(SELECT FULL_NAME FROM ORGANIZATIONS c WHERE c.ORGANIZATION_ID=u.ORGANIZATION_ID) AS 'Название организации',
		(SELECT COUNT(t.TASK_ID) FROM TASK t WHERE t.USER_ID=u.USR_ID) AS 'Кол-во выполненных работ',
FROM usr u
WHERE ORGANIZATION_ID>0
GROUP BY ORGANIZATION_ID
, то вываливается ошибка:
Column 'usr.USR_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

как в данном случае написать запрос, чтоб при группировке просуммировались значения из этих ячеек?
26 ноя 12, 11:20    [13528130]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Изучайте JOIN :))
SELECT
 u.ORGANIZATION_ID
,[Название организации]=o.FULL_NAME
,[Кол-во выполненных работ]=COUNT(t.TASK_ID)
FROM usr u
LEFT JOIN ORGANIZATIONS o ON u.ORGANIZATION_ID=o.ORGANIZATION_ID
LEFT JOIN TASK t ON u.USR_ID=t.USER_ID
WHERE u.ORGANIZATION_ID>0
GROUP BY u.ORGANIZATION_ID, o.FULL_NAME;
26 ноя 12, 11:31    [13528211]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
eXeLe,

убрать подзапросы

SELECT	O.ORGANIZATION_ID,
O.FULL_NAME AS 'Название организации',
COUNT(t.TASK_ID) AS 'Кол-во выполненных работ'
FROM usr u
join ORGANIZATIONS o ON o.ORGANIZATION_ID=u.ORGANIZATION_ID
join TASK t ON t.USER_ID=u.USR_ID
WHERE ORGANIZATION_ID>0
GROUP BY O.ORGANIZATION_ID, O.FULL_NAME
26 ноя 12, 11:31    [13528217]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
eXeLe
Member

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

да джойны знаю, понимаю и с ними все работает, но мне сказали написать тоже самое через подзапросы...
вот тут и начались проблемы
26 ноя 12, 11:35    [13528251]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
Glory
Member

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

Потому что нужно сначала все посчитать в подзапросах. А потом "собирать" конечный результат.
26 ноя 12, 11:37    [13528260]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
eXeLe
Ruuu,

да джойны знаю, понимаю и с ними все работает, но мне сказали написать тоже самое через подзапросы...
вот тут и начались проблемы

тогда outer apply с нужными подзапросами
26 ноя 12, 11:37    [13528262]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ruuu
eXeLe,

убрать подзапросы

SELECT	O.ORGANIZATION_ID,
O.FULL_NAME AS 'Название организации',
COUNT(t.TASK_ID) AS 'Кол-во выполненных работ'
FROM usr u
join ORGANIZATIONS o ON o.ORGANIZATION_ID=u.ORGANIZATION_ID
join TASK t ON t.USER_ID=u.USR_ID
WHERE ORGANIZATION_ID>0
GROUP BY O.ORGANIZATION_ID, O.FULL_NAME
Исходному запросу соответствуют-таки LEFT JOINы :))
Ибо там коррелированные подзапросы в SELECTе.
А в ORGANIZATIONS и TASK соответствующих записей может и не оказаться
26 ноя 12, 11:40    [13528280]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапросы  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
iap
Исходному запросу соответствуют-таки LEFT JOINы :))
Ибо там коррелированные подзапросы в SELECTе.
А в ORGANIZATIONS и TASK соответствующих записей может и не оказаться

Да, конечно. Спасибо :)
26 ноя 12, 12:01    [13528431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить