2017-08-14 88 views
1

我需要一些幫助來查詢。 我有一個結果集,看起來像這樣:比較去年和今年的結果

表Stucture:

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

我需要得到一個結果集,如果在2016年有「東西wrong1」全球環境展望「AMS」,並在2017年我們對於相同的Geo'AMS',再次出現'Something wrong1'。 顯示我的地理位置「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 

但是這隻能說明我的地理這是雙不看INS列。

+2

請將表格數據和預期結果作爲格式化文本,請!同時向我們展示您當前的查詢嘗試。 – jarlh

+0

您正在使用哪個數據庫? – Prathyush

+0

@jarlh你能幫我解釋我能做到嗎? – Vico

回答

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

據我可以看到這個查詢做了詭計!感謝RealCheeseLord! – Vico

+0

如果有效,可能標記爲答案:D – RealCheeseLord

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