在单独的邮政编码列表上过滤地址列表

时间:2019-04-25 13:53:02

标签: sql ms-access

我要根据地址中是否包含许多邮政编码来过滤一长串地址,如何构造SQL查询?

地址看起来像这样

+------------------------------------------+
|              address                     |
+------------------------------------------+
| 69, example entry road, London, wa13 657 |
| 87, example entry road, London, eC2B 984 |
+------------------------------------------+

这样的邮政编码

+-----------+
| Postcodes |
+-----------+
| Wa13 657  |
| eC2B 984  |
| eq8 987   |
+-----------+

地址表中有一个ID

我最接近的是以下内容;

SELECT p.Postcodes, COUNT(*)
FROM [City Postcodes] AS p 
INNER JOIN [17-18] AS a ON (a.[Address], p.Postcodes) > 0
GROUP BY p.Postcodes;

但是,这只是计算每个邮政编码的出现次数。我真正想做的是过滤地址表并根据邮政编码识别ID,因此我可以获取ID并在Excel中处理数据。

2 个答案:

答案 0 :(得分:1)

那么,您只需要JOIN而不进行汇总吗?

SELECT a.*, p.Postcode
FROM [17-18] AS a INNER JOIN
     [City Postcodes] AS p
     ON instr(a.[Address], p.Postcodes) > 0;

如果只需要特定的邮政编码,则可以添加WHERE子句。

请注意,这不会返回与邮政编码表不匹配的地址。如果需要所有地址,请使用LEFT JOIN

答案 1 :(得分:0)

如果我对您的理解正确,则希望将所有ID按邮政编码分组。您可以使用隐藏功能或通过Oracle LISTAGG来完成此操作:

SELECT p.POSTAL, LISTAGG(a.ID, ',') WITHIN GROUP (ORDER BY p.POSTAL) ids 
FROM Address a 
INNER JOIN Postcodes p ON a.POSTAL LIKE p.POSTAL 
GROUP BY p.POSTAL;

我创建了一个sql小提琴,您可以在其中测试代码:http://www.sqlfiddle.com/#!4/ca6844/1