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
Другие вопросы по тегам