我需要一些查询方面的帮助。我有一个如下所示的结果集:
表结构:
GEO | YEAR | INS
---------------------------
Ams | 2016 | something wrong1
Ams | 2016 | something wrong2
Ams | 2017 | something wrong1我需要得到一个结果集,如果在2016年有'Something wrong1‘的地理位置’a‘,在2017年我们再次有'Something wrong1’相同的地理位置‘a’。向我显示地理位置'AMS‘
本质上,我需要比较2016年的结果集和2017年的结果集。如果同样的GEO在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列。
发布于 2017-08-14 17:14:03
您应该能够使用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发布于 2017-08-14 18:44:55
您可以使用聚合来完成此操作:
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。
https://stackoverflow.com/questions/45670787
复制相似问题