比较去年和今年的结果

时间:2017-08-14 08:54:03

标签: sql sql-server-2012

我需要一些查询帮助。 我有一个如下所示的结果集:

表结构:

 GEO | YEAR | INS
 ---------------------------
 Ams | 2016 | something wrong1
 Ams | 2016 | something wrong2
 Ams | 2017 | something wrong1

如果在2016年GEO'AMS'出现'Something wrong1',我需要得到一个结果集,并且在2017年我们再次为同一个Geo'AMS'出现'Something wrong1'。 告诉我Geo'AMS'

本质上,我需要比较2016年的结果集和2017年的结果集。 如果对于同一个地理位置,我们在2016年和2017年都有相同的缺陷,那么查询需要向我展示GEO。

任何帮助将不胜感激

我到目前为止的查询:

select Geo
from (
    select Geo
    from dbo.results
    WHERE (INS in ('something wrong1', 'something wrong2'))
) as res 
Group by Geo
having count(*) > 1

但这只能告诉我Geo它是双倍的,它没有看INS列。

2 个答案:

答案 0 :(得分:1)

你应该能够通过selfjoin来做到这一点,例如:

SELECT Geo
  FROM dbo.results t1
  JOIN dbo.results t2
    ON t1.GEO = t2.GEO
   AND t1.INS = t2.INS
   AND t1.YEAR <> t2.YEAR
 GROUP BY Geo

答案 1 :(得分:0)

您可以使用聚合执行此操作:

select Geo
from dbo.results
where ins = 'something wrong1' and
      year in (2016, 2017)
group by Geo
having count(distinct year) = 2;

我不确定'something wrong2'与问题的关系。

如果您只想在两年内使用相同的ins,则可以执行以下操作:

select Geo, ins
from dbo.results
where year in (2016, 2017)
group by Geo, ins
having count(distinct year) = 2;

这会同时返回Geoins