MsSql Group By дважды
У меня есть 3 таблицы:
Corridors (CorridorID int Primary)
Locations(LocationID int Primary, LocationMax int, CorridorID int)
Inventory(Inventory ID, SerialNo varchar)
Я попытался запрос, как это:
select C.ID, Count(Distinct(SerialNo)), Sum(L.Max) as TotalCapacity from Corridors as C
Inner Join Locations L on L.CorridorID=C.ID
Inner Join Inventory I on I.LocationID=L.ID
Group By C.ID
но Sum получает LocationMax более одного раза
Истинный результат для меня (30+40+10+20), я имею в виду одну временную сумму для каждой локации. Возможно ли сделать "Group By" дважды? Как я могу получить такой результат? (30+40+10+20)
1 ответ
Как @TIM предложил использовать MAX... попробуйте это. Для объяснения шага 1 Сначала разбейте его по значениям ключевых столбцов, которые вы ищете... (Вы также можете использовать Max, min и т. Д. В зависимости от ваших требований.) И найти дубликаты.
Шаг 2: Будет выставлен внешний запрос и подведен итог по группе. Отфильтруйте все возможные дубликаты, используя предложение where
for.eg
SELECT
SUM(LocationMax)AS Kapasite
,ID
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY C.ID Order by C.ID ) as Row_no,
C.ID,
L.LocationMax
FROM Corridors as C
INNER JOIN Locations L ON L.CorridorID=C.ID
INNER JOIN Inventory I ON I.LocationID=L.ID
)T
WHERE T.Row_no=1
Group by ID