#sql #sql-server #tsql
Вопрос:
Во-первых, это связано с Microsoft SQL Server 2014
У меня есть две таблицы в базе данных: Отгрузка и упаковка. Каждая отгрузка имеет идентификатор отгрузки, а каждая посылка имеет как идентификатор отгрузки, так и идентификатор упаковки. Отправление может состоять из более чем одной посылки, т. е. несколько посылок могут иметь один и тот же идентификатор отправки.
Я пытаюсь подсчитать количество отправлений, которые у меня есть, на количество посылок.
Итак, что-то вроде этого:
Подсчитайте Пакеты | Количество отправлений |
---|---|
1 | 1,000,000 |
2 | 250,000 |
3 | 100,000 |
4 | 5,000 |
5 | 1,000 |
Я выяснил, как получить количество посылок для каждой Отправки_ID, что я и сделал следующим образом:
SELECT s.Shipment_ID, COUNT(p.Package_ID)
FROM Shipment s
LEFT JOIN Package p ON s.Shipment_ID = p.Shipment_ID
GROUP BY s.Shipment_ID
Вот где я застрял. Я не могу понять, как свести это к количеству отправлений для каждого количества посылок.
Моей первой мыслью было как-то сгруппироваться COUNT(p.Package_ID)
, но агрегатные функции нельзя использовать в группе by.
У кого-нибудь есть какие-нибудь идеи, как я могу это сделать?
Комментарии:
1. Я не понимаю, чего вы здесь добиваетесь. Примеры данных, дополняющие ваши ожидаемые результаты, помогут нам помочь вам здесь.
Ответ №1:
Используйте свой запрос в качестве подзапроса и добавьте сверху другой запрос.
SELECT ShipmentCount, COUNT(*)
FROM (
SELECT s.Shipment_ID, COUNT(p.Package_ID) ShipmentCount
FROM Shipment s
LEFT JOIN Package p on s.Shipment_ID = p.Shipment_ID
GROUP BY s.Shipment_ID
) X
GROUP BY ShipmentCount;