显示具有不同城市的重复行

时间:2017-02-07 11:00:20

标签: sql sql-server tsql

目标: 显示具有相似地址和邮政编码但不包含城市

的行

请求结果如下:

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')

问题: 我不知道如何检索它。

3 个答案:

答案 0 :(得分:1)

您可以使用EXISTS-subquery:

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

答案 1 :(得分: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

答案 2 :(得分: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