我目前正在 ODI 中開發 ETL 流程。源檔案具有以下形狀:
| MPS_OPERATIVA | MPS_DETALLEOPERATIVA | RAM_ID | RAM_ALIAS | RAM_NOMBRE | DATAPOOL |
|---------------|------------------------------------------|--------|------------|--------------------------------------|------------------------|
| Anulaciones | A Efecto - Desistimiento Cliente | 41 | PENSIPLANP | PLANES DE PENSIONES INDIVIDUALES | Vida Ahorro |
| Anulaciones | A Efecto - Desistimiento Cliente | 656 | UNITLINK | UNIT LINK-UNIT LINK | Vida Ahorro |
| Anulaciones | A Efecto - Desistimiento Cliente | 278 | VIDAAHMIX | VIDA AHORRO -MIXTOS | Vida Ahorro |
| Anulaciones | A Efecto - Desistimiento Cliente | 281 | PIAS | VIDA AHORRO -PIAS | Vida Ahorro |
| Anulaciones | A Efecto - Desistimiento Cliente | 695 | VIDACAPDIF | VIDA AHORRO-CAPITAL DIFERIDO | Vida Ahorro |
| Anulaciones | A Efecto - Desistimiento Cliente | 275 | VIDAPURO | VIDA RIESGO -VIDA PURO | Vida riesgo |
| Anulaciones | A Efecto - Error Emisión | 41 | PENSIPLANP | PLANES DE PENSIONES INDIVIDUALES | Vida Ahorro |
| Anulaciones | A Efecto - Error Emisión | 656 | UNITLINK | UNIT LINK-UNIT LINK | Vida Ahorro |
| Anulaciones | A Efecto - Error Emisión | 278 | VIDAAHMIX | VIDA AHORRO -MIXTOS | Vida Ahorro |
| Anulaciones | A Efecto - Error Emisión | 281 | PIAS | VIDA AHORRO -PIAS | Vida Ahorro |
| Anulaciones | A Efecto - Error Emisión | 695 | VIDACAPDIF | VIDA AHORRO-CAPITAL DIFERIDO | Vida Ahorro |
| Anulaciones | A Efecto - Error Emisión | 275 | VIDAPURO | VIDA RIESGO -VIDA PURO | Vida riesgo |
| Anulaciones | A Fecha - Cese o desaparición del riesgo | 309 | EMPOTROS | EMPRESAS -OTROS SEGUROS Y SERVICIOS | Resto Seguros Empresas |
| Anulaciones | A Fecha - Cese o desaparición del riesgo | 309 | EMPOTROS | EMPRESAS -OTROS SEGUROS Y SERVICIOS | Resto Seguros Empresas |
| Anulaciones | A Fecha - Cese o desaparición del riesgo | 309 | EMPOTROS | EMPRESAS -OTROS SEGUROS Y SERVICIOS | Resto Seguros Empresas |
我需要與源交叉的另一個檔案具有以下形狀:
| PK_RAMO | DES_RAMO_SFC | DES_RAMO_NEURONA | DES_RAMO_DTP |
|---------|----------------------------------|----------------------------------------------------------------------------------|----------------------------|
| 1 | BM Accidentes | ACCIDENTES; VIDAACCID | Accidentes |
| 2 | BM Autos y Motos | AUTOS; CAMIONES; MOTOS; VEHIFLOTAS | Autos |
| 3 | BM Comercio | COMERCIOS | Comercio |
| 4 | BM Construcción | CONSTRUCC | Construcción |
| 5 | BM Crédito | CAUCIONCTO | Crédito |
| 6 | BM Decesos | DECESOS | Decesos |
| 7 | BM Hogar | HOGAR | Hogar |
| 8 | BM Leasing | LEASING | Leasing |
| 9 | BM Multirriesgo Empresas | PYMES;MERCANTIL | Mult Empresas |
| 10 | BM Planes Pensiones | PENSIPLANP | Pensiones |
| 11 | BM Protección de Pagos | PROTPAGOS | Prot de Pagos |
| 12 | BM RC General | RCEMPRESA | Resp. Civil |
| 13 | BM Resto de Seguros Empresas | AGROPEC; CASCOS;EMPOTROS;MAQUINARIA;TPTMERCAN | Resto Seguros Empresas |
| 14 | BM Resto de Seguros Particulares | ASISVIAJE;COMUNIDAD;GENOCIO;GENOTROS;HOGAROTROS;OTRASIST;OTROS;PROTFAMIL;RCFAMIL | Resto Seguros Particulares |
| 15 | BM Salud | ASISSANIT;INDEMNIZ;REEMBOLSO | Salud |
| 16 | BM Vida Ahorro | PIAS;PPA;VIDAAHMIX;VIDAAHOPU;VIDACAPDIF;VIDARENTA | Vida Ahorro |
| 17 | BM Vida Riesgo Puro | VIDAPURO | Vida Riesgo |
| 18 | BM Vida Riesgo Amortización | VIDAOPFIN | Vida Vinculado |
兩個檔案都需要交叉RAM_ALIAS = DES_RAMO_NEURONA,但是,我正在努力做到這一點。
我做了以下事情:
SELECT * FROM file21 t1
LEFT JOIN file2 t2
-- Searching the word in the other file
ON t1.ram_alias = SUBSTR(t2.des_ramo_neurona, INSTR(t2.des_ramo_neurona, t1.ram_alias), LENGTH(t1.ram_alias))
-- Special Cases
WHERE ((SUBSTR(t2.des_ramo_neurona, INSTR(t2.DES_RAMO_NEURONA, t1.RAM_ALIAS), (LENGTH(t1.RAM_ALIAS) 1)) = CONCAT(t1.RAM_ALIAS,';'))
OR (SUBSTR(t2.des_ramo_neurona, INSTR(t2.DES_RAMO_NEURONA, t1.RAM_ALIAS), (LENGTH(t1.RAM_ALIAS) 1)) = CONCAT(t1.RAM_ALIAS,''))
OR (t2.des_ramo_neurona IS NULL))
但是,這樣做時,由于某些單詞包含“OTROS”一詞,我會生成重復項。如您所見,“OTROS”一詞可以包含在“EMPOTROS”或“GENOTROS”等其他詞中。
請問,您知道如何解決這個問題,或者您對如何執行這個 SQL 查詢有更好的想法嗎?
提前致謝
uj5u.com熱心網友回復:
匹配整個術語并包括前導和后繼分隔符:
SELECT *
FROM file21 t1
LEFT JOIN file2 t2
-- Searching the word in the other file
ON ';' || t2.des_ramo_neurona || ';' LIKE '%;' || t1.ram_alias || ';%'
并且,如有必要,您可以使用以下方法替換分隔符后的單個空格:
SELECT *
FROM file21 t1
LEFT JOIN file2 t2
-- Searching the word in the other file
ON ';' || REPLACE(t2.des_ramo_neurona, '; ', ';') || ';'
LIKE '%;' || t1.ram_alias || ';%'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461913.html
