Power Query中基于LookupQuery匹配嵌入值添加自定义列
在MainQuery中添加匹配LookupQuery唯一值的列
需要在MainQuery中新增一列,根据LookupQuery里的唯一值,匹配MainQuery的Column1文本中包含的对应值并填充,未匹配到则返回空白或NULL。
Main Query
| Column1 |
|---|
| ...111. |
| ..ABC.. |
| ..34C.. |
| ...xyz. |
| yyy..... |
Lookup Query
| Uniques |
|---|
| 34C |
| ABC |
| 111 |
期望输出
| Column1 | New Column |
|---|---|
| ...111.. | 111 |
| ..ABC... | ABC |
| ..34C... | 34C |
| ....xyz. | |
| yyy..... |
解决方案
根据不同数据库,可采用以下SQL语句实现:
SQL Server
-- 若Column1仅匹配一个唯一值,直接关联 SELECT m.Column1, l.Uniques AS [New Column] FROM MainQuery m LEFT JOIN LookupQuery l ON m.Column1 LIKE '%' + l.Uniques + '%' -- 若Column1可能匹配多个值,仅返回第一个匹配结果 SELECT m.Column1, l.Uniques AS [New Column] FROM MainQuery m OUTER APPLY ( SELECT TOP 1 Uniques FROM LookupQuery WHERE m.Column1 LIKE '%' + Uniques + '%' ) l
PostgreSQL
-- 基础匹配 SELECT m.Column1, l.Uniques AS "New Column" FROM MainQuery m LEFT JOIN LookupQuery l ON m.Column1 ~* l.Uniques; -- 仅返回第一个匹配结果 SELECT m.Column1, l.Uniques AS "New Column" FROM MainQuery m LEFT JOIN LATERAL ( SELECT Uniques FROM LookupQuery WHERE m.Column1 ~* Uniques LIMIT 1 ) l ON true;
MySQL
-- 基础匹配 SELECT m.Column1, l.Uniques AS `New Column` FROM MainQuery m LEFT JOIN LookupQuery l ON LOCATE(l.Uniques, m.Column1) > 0; -- 仅返回第一个匹配结果 SELECT m.Column1, (SELECT Uniques FROM LookupQuery WHERE LOCATE(Uniques, m.Column1) > 0 LIMIT 1) AS `New Column` FROM MainQuery m;
内容的提问来源于stack exchange,提问作者irene
相关产品推荐
相关产品推荐

