Рассмотрите следующий подзапрос. Этот запрос извлекает все личные данные сотрудников, у которых есть более 1 'IDKleerkastPersoon'. Для этого вопроса я использую оператор COUNT() в моем HAVING. Эта подзадача возвращает все персональные идентификаторы для сотрудников.SQL subQuery с COUNT() в инструкции WHERE/HAVING
(SELECT DISTINCT Persoon_1.Stamnr
FROM dbo.KleerkastPerPersoon AS KleerkastPerPersoon_1 INNER JOIN
dbo.Persoon AS Persoon_1 ON KleerkastPerPersoon_1.ID_Persoon = Persoon_1.ID_Persoon
GROUP BY Persoon_1.Stamnr, Persoon_1.ID_Afdeling, KleerkastPerPersoon.IDKleerkastPersoon, Persoon.Naam
HAVING (Persoon_1.ID_Afdeling = 2) AND (COUNT(KleerkastPerPersoon.IDKleerkastPersoon) >= 2)
ORDER BY Persoon_1.Stamnr DESC)
Теперь пользователь запросил дополнительную информацию, а затем только PersonalId сотрудников. Поэтому я написал над ним запрос (см. Ниже), который извлекает более глобальную информацию о сотруднике. Как и ожидалось, сервер sql отвергает этот метод.
SELECT dbo.Persoon.Stamnr, dbo.Persoon.Naam, dbo.Persoon.Voornaam, dbo.Refter.RefterOmschrijving, dbo.Kleedkamer.KleedkamerOmschrijving,
dbo.Kleerkast.KleerkastOmschrijving
FROM dbo.KleerkastPerPersoon INNER JOIN
dbo.Persoon ON dbo.KleerkastPerPersoon.ID_Persoon = dbo.Persoon.ID_Persoon INNER JOIN
dbo.Kleerkast INNER JOIN
dbo.Kleedkamer ON dbo.Kleerkast.ID_Kleedkamer = dbo.Kleedkamer.ID_Kleedkamer INNER JOIN
dbo.Refter ON dbo.Kleedkamer.ID_Refter = dbo.Refter.ID_Refter ON dbo.KleerkastPerPersoon.ID_Kleerkast = dbo.Kleerkast.ID_Kleerkast
WHERE (dbo.Persoon.Stamnr IN <<<Result of my first subquery>>>
)
Сообщение об ошибке броска является:
An aggregate may not appear in the where clause unless it is in a subquery contained in a having clause or a select list, and the column being aggregated is an outer reference
Так я переместил подзапрос к имеющей п:
<<<Query 2>>>
HAVING (dbo.Persoon.Stamnr IN
(SELECT TOP (100) PERCENT Persoon_1.Stamnr
FROM dbo.KleerkastPerPersoon AS KleerkastPerPersoon_1 INNER JOIN
dbo.Persoon AS Persoon_1 ON KleerkastPerPersoon_1.ID_Persoon = Persoon_1.ID_Persoon
GROUP BY Persoon_1.Stamnr, Persoon_1.ID_Afdeling
HAVING (Persoon_1.ID_Afdeling = 2) AND (COUNT(KleerkastPerPersoon.IDKleerkastPersoon) >= 2)
ORDER BY Persoon_1.Stamnr DESC))
Но теперь запрос не возвращает никаких результатов. Хотя я должен видеть 98 разных записей. У любого из вас есть решение моей проблемы или моего обходного пути? Как я могу удалить необходимость в подзапросе, например.
Красиво отмечены. Это «Заказ» на деле является излишним. Будет следить за вашими советами и создавать соблазнительные результаты для моего первого запроса. – User999999