2015-12-10 82 views
0

examle tableMSSQL集團通過兩次

我有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 

但總得到LocationMax超過一次

我的真實結果是(30 + 40 + 10 + 20)我是指每個地點的一次性總和。 ©它有可能做兩次「分組」?我怎樣才能得到這樣的結果? (30 + 40 + 10 + 20)

+0

你可以使用'MIN (L.LocationMax)OVER(PARTITION BY LocationID)過濾器的任何可能的重複' –

回答

0

像@TIM建議使用MAX ...試試這個。 解釋 步驟1首先按照您所在的鍵列值對其進行分區...(您也可以根據您的要求使用最大值,最小值等)。&找到重複項。

第2步:將放置一個外部查詢並基於該組進行總結。通過使用where子句

for.e.g

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 
+0

沒有奏效。給出錯誤:列'Locations.LocationID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 –

+0

更新,這應該工作請嘗試 – singhswat

+0

錯誤:函數'ROW_NUMBER'必須有ORDER BY的OVER子句。 –