2011-04-12 120 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