2010-08-10 115 views
2

我一直在浏览论坛,同时试图找到我的问题的解决方案。基于一个不同的列从行中选择所有值

我有一个表在SQL Server 2000中调用result与以下数据;

City  Price DepDate  RetDate 
Barcelona 145 2010-05-15 2010-05-20 
New York 400 2010-06-20 2010-06-20 
Barcelona 160 2010-05-17 2010-05-22 
New York 325 2010-05-10 2010-05-18 
Istanbul 250 2010-06-22 2010-06-27 

我想查询在SQL Server 2000,以便将返回所有列,但它是截然不同/潮头上的城市,仅显示价格最低。

所以我想它返回以下

Barcelona 145 2010-05-15 2010-05-20 
New York 325 2010-05-10 2010-05-18 
Istanbu 250 2010-06-22 2010-06-27 

我不能为我的生活弄清楚如何做到这一点,我应该很容易,我敢肯定,我会觉得愚蠢当解决方案。

有谁知道如何做到这一点?

Brgds, 埃里克

回答

1
SELECT 
    A1.* 
FROM 
    [TableName] A1 
    INNER JOIN 
    (
     SELECT 
      A.City 
      , A.Price 
      , MIN(A.DepDate) AS DepDateMin 
     FROM 
      [TableName] A 
      INNER JOIN 
      ( SELECT 
        City 
        , MIN(Price) AS PriceMin 
       FROM 
        [TableName] 
       GROUP BY City 
      ) B ON A.City = B.City AND A.Price = B.PriceMin 
     GROUP BY 
      A.City, A.Price 
    ) B1 ON A1.City = B1.City AND A1.Price = B1.PriceMin AND A1.DepDate = B2.DepDateMin 
+0

需要在查询修改给别名MIN(价格)和条件应该是A.price = B. ,之后,此查询将起作用 – 2010-08-10 09:55:17

+0

It Works!非常感谢你,希望我能理解它是如何工作的。我一直在这个多年。谢谢!! – 2010-08-10 10:05:29

+0

一个简单的问题是,修改这个问题很容易,因此价格也必须明显不同。 – 2010-08-10 10:11:37

0

试试这个

select City,Price,DepDate,,RetDate from Your_table a 
where a.Price = (select min(Price) from Your_table b 
       where a.city = b.city group by city) 
+0

这似乎也适用于:) – 2010-08-10 10:45:13

相关问题