我需要一些查询帮助。 我有一个如下所示的结果集:
表结构:
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列。
答案 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;
这会同时返回Geo
和ins
。