2016-02-12 123 views
1

我在數據庫中獲得了以下表格。我們的產品有一系列的多個產品,我們有ProductVariation,每個產品有多個產品差異。T-SQL從子查詢中選擇MAX

我們希望根據系列的ID在ProductVariation表上爲一組產品執行一組聚合查詢。對於276的SeriesID,ProductID的400-415與SeriesID匹配。然後,我們希望查找ProductVariation表中分配有ProductID 400-415的各個字段的最小值和最大值。

我寫的T-SQL語句如下: -

SELECT(
    SELECT MAX([X]) FROM [ProductVariation] AS B WHERE B.ProductID = A.ProductID  
) 
FROM [Product] AS A 
WHERE SeriesID = 12 AND IsDeleted = 0 and IsEnabled = 1 

但這返回15行的最小值和最大值的數據。我正在尋找Maximum的最大值,但我不知道如何修改上述語句來檢索它。我們還需要至少在同一個查詢中完成10個這樣的聚合。

任何人都可以建議如何獲得最大值?

乾杯, Mike。

回答

1

好的,所以我的問題是,以上都是正確的,但事實證明,我正在通過SeriesID尋找組,以返回每個SeriesID的設置字段的MIN和MAX。非常感謝所有的SQL語句,你們幫助解決了我以前多次遇到的問題! :)

在SQL: -

@奧利弗的職位是什麼使得這觸發爲我所需要的。然後,我爲GROUP BY SeriesID添加了一個我需要做的事情。

在LINQ: -

(from x in productBlocks 
    join y in products on x.ProductBlockID equals y.ProductBlockID 
    where x.SeriesID == id && x.IsEnabled && !x.IsDeleted 
    group y by x.SeriesID into g 
    select new SeriesCharacteristicsViewModel 
    { 
     MinWheelDiameter = g.Min(s => s.WheelDiameter), 
     MaxWheelDiameter = g.Max(s => s.WheelDiameter), 
     ShoreHardness = g.Select(s => s.ShoreHardness).FirstOrDefault(), 
     MinimumCarryingCapacityAt4kmh = g.Min(s => s.StaticCapacity), 
     MaximumCarryingCapacityAt4kmh = g.Max(s=>s.StaticCapacity), 
     MinimumRollingResistance = g.Min(s=>s.RollingResistance), 
     MaximumRollingResistance = g.Max(s=>s.RollingResistance), 
     MinimumTemperature = g.Min(s=>s.TempFrom), 
     MaximumTemperature = g.Max(s=>s.TempTo) 
    } 
) 
2

如果我明白你很好,你問這個:

SELECT MAX(
    SELECT MAX([WheelDiameter]) FROM [AUT].[dbo].[Product] AS B WHERE B.ProductBlockID = A.ProductBlockID  
) 
FROM [AUT].[dbo].[ProductBlock] AS A 
WHERE SeriesID = 12 AND IsDeleted = 0 and IsEnabled = 1 
+0

這是我嘗試過,但我得到'近第2行 –

+0

關鍵字SELECT'語法錯誤「無法在一個表達式執行聚合函數包含聚合或一個子查詢「。 –

+0

WITH NewSelect AS(SELECT( )SELECT MAX([WheelDiameter])FROM [AUT]。[dbo]。[Product] AS B WHERE 。[ProductBlock] AS A WHERE SeriesID = 12 AND IsDeleted = 0且IsEnabled = 1) SELECT MAX(max1) –

0
SELECT MAX(A.MAXVALUE) as MAXVALUE 
FROM 
(
SELECT MAX([WheelDiameter]) MAXVALUE 
FROM [AUT].[dbo].[Product] AS B 
INNER JOIN FROM [AUT].[dbo].[ProductBlock] AS A 
ON (B.ProductBlockID = A.ProductBlockID) 
WHERE SeriesID = 12 
AND IsDeleted = 0 
AND IsEnabled = 1  
)A 
0

試試這個:

SELECT a.SeriesID, min(c.min), max(c.max) 
FROM [Product] AS A outer apply 
     (SELECT MIN(X) min, MAX([X]) max 
     FROM [ProductVariation] AS B 
     WHERE B.ProductID = A.ProductID) as c 
WHERE a.SeriesID in (12,13,14) AND a.IsDeleted = 0 and a.IsEnabled = 1 
GROUP BY a.SeriesID 
0
SELECT MAX(A.Maximum) as MAXVALUE 
FROM 
(
    SELECT MAX([WheelDiameter]) Maximum 
    FROM [AUT].[dbo].[Product] AS Product WHERE Product.ProductBlockID = ProductBlock.ProductBlockID 
    INNER JOIN [AUT].[dbo].[ProductBlock] AS ProductBlock ON Product.ProductBlockID = ProductBlock.ProductBlockID 
    WHERE SeriesID = 12 AND IsDeleted = 0 and IsEnabled = 1  
) A 
3

所以基本上,你只是想在一個最大的整個系列?我認爲在其他解決方案中有太多MAX。只需加入:

SELECT MAX(PV.X), MAX(PV.Y) 
FROM [Product] AS P 
JOIN [ProductVariation] AS PV ON P.ProductID = PV.ProductID 
WHERE P.SeriesID = 12 AND P.IsDeleted = 0 and P.IsEnabled = 1 

這樣,您也可以一次查詢多個最大值。