2017-02-07 10 views
2

目標: 表示同様のアドレスと郵便番号を持つ行が、以下ではない市表示重複行

要求された結果:

Address    ZipCode City 
Biskop Svanes Vej 5 3460  Birkerød Ruteplan 
Biskop Svanes Vej 5 3460  København S 
Biskop Svanes Vej 5 3460  Holte 
Peter Bangs Vej 30 2000  Frederiksberg 
Peter Bangs Vej 30 2000  Holte 
Kigkurren 8 R   2300  København 
Kigkurren 8 R   2300  Køge 

すべてのデータ:

Lyneborggade 9   2300 København S 
Biskop Svanes Vej 5  3460 Birkerød Ruteplan 
Brogade 2    4300 Holbæk 
Grønnevej 7    4600 København S 
Kalkbrænderiløbskaj 4 2100 København Ø 
Lyngbakkevej 14   2840 Holte 
Peter Bangs Vej 30  2000 Frederiksberg 
Biskop Svanes Vej 5  3460 Holte 
Biskop Svanes Vej 5  3460 København S 
Kigkurren 8 R   2300 København 
Kigkurren 8 R   2300 Køge 

ソースコード:

Create Table #TempTable 
(
    [Address] nvarchar(80), 
    Zipcode nvarchar(50), 
    City nvarchar(50) 
) 

INSERT INTO #TempTable 
(Address, Zipcode, City) 
VALUES 
('Lyneborggade 9','2300','København S'), 
('Biskop Svanes Vej 5', '3460', 'Birkerød Ruteplan'), 
('Brogade 2', '4300', 'Holbæk'), 
('Grønnevej 7', '4600', 'København S'), 
('Kalkbrænderiløbskaj 4', '2100', 'København Ø'), 
('Lyngbakkevej 14', '2840', 'Holte'), 
('Peter Bangs Vej 30', '2000', 'Frederiksberg'), 
('Biskop Svanes Vej 5','3460','Holte'), 
('Biskop Svanes Vej 5', '3460', 'København S'), 
('Kigkurren 8 R', '2300', 'København'), 
('Kigkurren 8 R', '2300', 'Køge') 

問題: 私はそれを取得する方法を知りません。

+0

あなたのサンプルデータは、所望の出力と一致していません。たとえば、サンプルデータには郵便番号3460の行が1つしかありませんが、目的の出力では3つの異なる行に表示されます。これを修正するためにあなたの質問を編集してください。 –

+0

ありがとう、私は今更新しました –

答えて

1

あなたはEXISTS、サブクエリを使用することができます達成するためにサブクエリを使用することができます。

select Address, Zipcode, City 
from #Temptable as T 
Where exists 
(select * 
    from #Temptable as T1 
    where T1.address = T.address -- same address & zip 
    and T1.zipcode = T.zipcode 
    and T1.city <> T.city  -- but different city 
) 
order by Address, Zipcode, City 

それともグループは数:

WITH cte AS 
(select t.*, 
     COUNT(*) 
     OVER (PARTITION BY Address, Zipcode) AS cnt 
    from #Temptable T1 
) 
select Address, Zipcode, City 
from cte 
where cnt > 1 
order by Address, Zipcode, City 
+0

コードが動作しません –

+0

@ What'sUP:申し訳ありませんが、私のせいで、それを修正しました – dnoeth

+0

あなたの助けよりよ! –

0

あなたは、これは

select Distinct Address, Zipcode, City 
from #Temptable 
Where exists (select Address, Zipcode 
         from #Temptable T1 
         where T1.address = address and T1.zipcode = zipcode 
         group by Address, Zipcode 
         having count(*) > 1) 
order by Address, Zipcode, City 
+0

内容を更新しました –

+0

このクエリを試しましたか? Plzは私にフィードバックを与える – Hadi

+0

コードは動作しません。 –

1

てみてくださいこのコード:

DECLARE @TempTable TABLE 
    (
     [Address] NVARCHAR(80) , 
     Zipcode NVARCHAR(50) , 
     City NVARCHAR(50) 
    ); 

INSERT INTO @TempTable 
     (Address, Zipcode, City) 
VALUES ('Lyneborggade 9', '2300', 'København S'), 
     ('Biskop Svanes Vej 5', '3460', 'Birkerød Ruteplan'), 
     ('Brogade 2', '4300', 'Holbæk'), 
     ('Grønnevej 7', '4600', 'København S'), 
     ('Kalkbrænderiløbskaj 4', '2100', 'København Ø'), 
     ('Lyngbakkevej 14', '2840', 'Holte'), 
     ('Peter Bangs Vej 30', '2000', 'Frederiksberg'), 
     ('Biskop Svanes Vej 5', '3460', 'Holte'), 
     ('Biskop Svanes Vej 5', '3460', 'København S'), 
     ('Kigkurren 8 R', '2300', 'København'), 
     ('Kigkurren 8 R', '2300', 'Køge'); 

SELECT DISTINCT 
     A.Address , 
     A.Zipcode , 
     A.City 
FROM @TempTable A 
     INNER JOIN #TempTable B ON A.Address = B.Address 
            AND A.Zipcode = B.Zipcode 
            AND A.City <> B.City; 

結果は次のとおりです。

Biskop Svanes Vej 5 3460 Birkerød Ruteplan 
Biskop Svanes Vej 5 3460 Holte 
Biskop Svanes Vej 5 3460 København S 
Kigkurren 8 R  2300 København 
Kigkurren 8 R  2300 Køge 
+0

動作しません –

+1

完全に動作します!私は自分の答えを編集し、結果を追加してテーブル名をあなたのテーブル名に変更しています... –

関連する問題