Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL根据列数据匹配获取数据_Sql_Self Join - Fatal编程技术网

如何使用SQL根据列数据匹配获取数据

如何使用SQL根据列数据匹配获取数据,sql,self-join,Sql,Self Join,寻找小帮助,我需要从一个表中获取数据,该表将包含所有年份的数据,如200920102011等 我需要创建一个SQL查询,它将根据特定年份是否有匹配的行来提取数据 此查询将帮助用户获取2010年输入产品的2011年产品价格 样本数据 ProductID price year 1020 2000 USD 2009 1030 100 USD 2009 10

寻找小帮助,我需要从一个表中获取数据,该表将包含所有年份的数据,如200920102011等

我需要创建一个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
试试这个

select * from productstbl 
where ( year = '2012' or year = '2011' )
and ProductID in (select ProductID from productstbl where year='2011' and year='2012' )
子查询版本

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行并破坏内容。或按ProductID分组,并根据需要使用最小()或最大()价格


如果子查询不返回任何内容,并且结果为空,则可能会合并子查询,使其默认为一个正常的默认值

请详细解释您的要求是什么,它不清楚,请将您的预期结果制成表格,以便更好地了解-旧式逗号分隔的表格列表样式已不再符合ANSI-92 SQL标准(20年前!)。请停止使用它这里有两个表,对吗?年份在这两个表中都是公共列?哪一个是这两个表中的公共列?谢谢大家MrSuzzy button query给了我一点帮助