2011-04-12 226 views
0

這是我的場景... 多個項目類型具有多個價格的多個項目。 想要選擇顯示最高價格的所有類型的項目。無法弄清楚如何獲得最大值?SQL查詢獲取列的最大值並顯示每一行

輸入:

ProductId ProductType Description  Price 

1所述的烤豆1.29

1乙烤豆1.98

輸出:

ProductId ProductType Description  Price 

1所述的烤豆1.98

1 B烤豆豆1.98

有什麼建議嗎?

回答

3
Select ProductId, ProductType, Description, MaxByDesc.MaxPrice 
From Product 
    Join (
      Select Description, Max(Price) As MaxPrice 
      From Product 
      Group By Description 
      ) As MaxByDesc 
     On MaxByDesc.Description = Product.Description 

如果您使用的是SQL Server 2005或更高版本:

Select ProductId, ProductType, Description 
    , Max(Price) Over (Partition By Description) As MaxPrice 
From Product 
+0

它的工作原理。非常感謝!我在我的子查詢中使用ROW_NUMBER()來獲取最新的Price。不知道我可以使用MAX()與分區BY ... – let007live4ever 2011-04-12 18:24:28

4

試試這個:

SELECT ProductId, 
    ProductType, 
    Description, 
    b.price 
    FROM <YOUR_TABLE> a, 
     (SELECT MAX(price) price FROM <YOUR_TABLE>) b 

對於那些誰愛ANSI語法:

SELECT ProductId, 
    ProductType, 
    Description, 
    b.price 
    FROM <YOUR_TABLE> a INNER JOIN 
    (SELECT MAX(price) price FROM <YOUR_TABLE>) b 
    ON 1=1 
+0

你讓我回答... – Brent 2011-04-12 18:22:53

+1

雖然,我絕不會推薦使用逗號分隔的語法。 SQL Server將停止支持它的日子將到來(如果只是它可能會更早發生)。 – Thomas 2011-04-12 18:25:34

+0

@Thomas:用ANSII版加入 – Chandu 2011-04-12 18:27:55

1

托馬斯,對,除了你需要按類型分組:

Select ProductId, ProductType, Description, MaxByDesc.MaxPrice 
From Product 
Join (
     Select Description, Max(Price) As MaxPrice 
     From Product 
     Group By ProductType 
     ) As MaxByDesc 
    On MaxByDesc.ProductType = Product.ProductType 
0

另一種方式:

SELECT ProductId 
    , ProductType 
    , Description 
    , (SELECT MAX(price) 
     FROM Product pg 
     WHERE pg.Description = p.Description 
     ) AS MaxPrice 
    FROM Product p 
+0

更新了帖子我投票贊成托馬斯的答案,儘管這兩者中的任何一個都是。 – 2011-04-12 19:55:07