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