0

寻求小帮助,我需要从一个表中获取数据,该表将包含 2009、2010、2011 等所有年份的数据。

我需要创建一个 SQL 查询,该查询将根据特定年份是否有匹配的行来提取数据

此查询将帮助用户获取 2010 年输入的产品在 2011 年的产品价格

样本数据

ProductID      price                  year 
1020           2000 USD                2009
1030           100  USD                2009
1030           150  USD                2010
1020           300  USD                2011
1020           310  USD                2012
1030           160  USD                2012
1040           400  USD                2012

下面的查询是我写的我毫无疑问所以请纠正我

select * 
from productstbl a ,productstbl b
where Year = '2012' and 
      ProductID in(select b.ProductID from productstbl where b.Year = '2011') and 
      a.ProductID=b.ProductID
4

2 回答 2

1

尝试这个

select * from productstbl 
where ( year = '2012' or year = '2011' )
and ProductID in (select ProductID from productstbl where year='2011' and year='2012' )
于 2013-03-13T10:26:21.957 回答
0

子查询版本

SELECT
  ProductID,
  price as ThisYear,
  (SELECT b.price FROM productstbl b 
   WHERE b.ProductID=a.ProductID
   AND b.year=2011) as LastYear 
FROM productstbl a
WHERE year=2012
ORDER BY ProductID

如果它是 MS SQL,我会在子查询中添加 TOP 1,以防数据超过 1 行并破坏事物。或者 GROUP BY ProductID 并根据需要使用 min() 或 max() 价格。

如果它不返回任何内容并最终为 Null,则可能围绕子查询的 Coalesce 默认为正常的默认值

于 2013-03-13T10:31:38.000 回答