各位前輩好,目前我要分析表內的地區
必須根據地區的表的內容分析出住址的區域
原本想到的作法是取開頭來做比對
但遇到的問題是,需要分析的資料的開頭長度不一致
想請問一下是否有函數能夠帶出最符合的選項,或是有別的方法能夠分析出資料
地區資料:
台北
台北中正區
台北大安區
台南
名古屋
溫哥華
摩洛哥
布魯克林
原始資料:
台北OOXXXX
台南XXOOOOO
布魯克林OOOOO
名古屋OOO
溫哥華XXX
摩洛哥XXXX
希望的資料格式:
台北OOXXXX,台北
台北中正區XXX,台北中正區
台北大安區OOO,台北大安區
台南XXOOOOO,台南
布魯克林OOOO,布魯克林
名古屋OOOOO,名古屋
溫哥華XXXXX,溫哥華
摩洛哥XXXXX,摩洛哥
恩?
select 原始資料
,地區資料
from (
select 原始資料
,地區資料
,Row_Number()over(partition by 原始資料 order by len(地區資料) desc) Sort
from 原始資料表
left join 地區資料表 on 原始資料 like '%' + 地區資料 + '%'
) k
where Sort = 1
台北中正區XXX會有2筆資料
台北中正區XXX,台北
台北中正區XXX,台北中正區
還要加個多筆同地址取地區字串最長的那筆
johncoc
的確~加個Row_Number()over(partition by 判斷~排序就可以了~
地區資料表:
CREATE TABLE Regions (
RegionName VARCHAR(50)
);
INSERT INTO Regions (RegionName) VALUES ('台北');
INSERT INTO Regions (RegionName) VALUES ('台北中正區');
INSERT INTO Regions (RegionName) VALUES ('台北大安區');
INSERT INTO Regions (RegionName) VALUES ('台南');
INSERT INTO Regions (RegionName) VALUES ('名古屋');
INSERT INTO Regions (RegionName) VALUES ('溫哥華');
INSERT INTO Regions (RegionName) VALUES ('摩洛哥');
INSERT INTO Regions (RegionName) VALUES ('布魯克林');
原始資料表:
CREATE TABLE Addresses (
Address VARCHAR(100)
);
INSERT INTO Addresses (Address) VALUES ('台北OOXXXX');
INSERT INTO Addresses (Address) VALUES ('台南XXOOOOO');
INSERT INTO Addresses (Address) VALUES ('布魯克林OOOOO');
INSERT INTO Addresses (Address) VALUES ('名古屋OOO');
INSERT INTO Addresses (Address) VALUES ('溫哥華XXX');
INSERT INTO Addresses (Address) VALUES ('摩洛哥XXXX');
SQL 查詢
SELECT a.Address, r.RegionName
FROM Addresses a
JOIN Regions r ON a.Address LIKE CONCAT(r.RegionName, '%');
結果:
Address RegionName
--------------- ----------------
台北OOXXXX 台北
台南XXOOOOO 台南
布魯克林OOOOO 布魯克林
名古屋OOO 名古屋
溫哥華XXX 溫哥華
摩洛哥XXXX 摩洛哥