目标: 显示具有相似地址和邮政编码但不包含城市
的行请求结果如下:
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 :(得分: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