2017-10-05 2 views
0

Merci d'avance.Comment trouver une partie d'une chaîne et faire une jointure sur cette partie de la chaîne?

J'ai un tableau 1:

ID      || Location 
ABC-999-8710-12345-000 || THYW.A 
ABC-900-8560-54321-100 || UJNC.E 
ABC-997-0090-98765-010 || QTHB.P 
ABC-923-2340-67890-001 || OMYB.Y 
ABC-009-8000-24680-000 || EVHO.N 
ABC-009-8000-26954-010 || IUTO.N 

J'ai une autre table2:

ID      || Location 
ABC-00    || THYW.A 
ABC054321-10    || UJNC.E 
ABC098765-01    || QTHB.P 
ABC067890-00    || OMYB.Y 
ABC024680-00    || EVHO.N 
ABC012678-01    || IUTO.N 

J'ai besoin de la table de sortie comme:

ID      || Location || OutPut 
ABC-999-8710-12345-000 || THYW.A  || Success 
ABC-900-8560-54321-100 || UJNC.E  || Success 
ABC-997-0090-98765-010 || QTHB.P  || Success 
ABC-923-2340-67890-001 || OMYB.Y  || Success 
ABC-009-8000-24680-000 || EVHO.N  || Success 
ABC-009-8000-26954-010 || IUTO.N  || 

Je dois prendre une partie de la chaîne et si elle correspond à l'ID dans la table2 puis j'ai besoin de mettre à jour la colonne sortie comme Succès.

C'est la requête de mise à jour je l'ai écrit:

update INT 
set Output= 'Success' 
FROM 
[dbo].[table1] INT 
join [dbo].[table2] SHB 
on INT.ID=SHB.ID 
+0

Pouvez-vous ajouter des données d'échantillon où la sortie est échoué. –

Répondre

1

Vous pouvez aussi tout simplement utiliser Left Join avec Substring() fonction comme ci-dessous:

SELECT T.ID, 
     T.Location, 
     CASE 
      WHEN T1.Location IS NULL 
      THEN '' 
      ELSE 'Success' 
     END AS 'Update' 
FROM 
(
    SELECT * 
    FROM table1 
) T 
LEFT JOIN table2 T1 ON SUBSTRING(T1.ID, 5, 5) = SUBSTRING(T.ID, 14, 5); 

Votre Update Query ressemblera comme ci-dessous:

UPDATE INT SET INT.Output = CASE 
      WHEN SHB.Location IS NULL 
      THEN '' 
      ELSE 'Success' 
     END 
FROM table1 INT 
LEFT JOIN table2 SHB ON SUBSTRING(SHB.ID, 5, 5) = SUBSTRING(INT.ID, 14, 5); 

Résultat souhaité:

ID      || Location || OutPut 
ABC-999-8710-12345-000 || THYW.A  || Success 
ABC-900-8560-54321-100 || UJNC.E  || Success 
ABC-997-0090-98765-010 || QTHB.P  || Success 
ABC-923-2340-67890-001 || OMYB.Y  || Success 
ABC-009-8000-24680-000 || EVHO.N  || Success 
ABC-009-8000-26954-010 || IUTO.N  || 
2

utiliser pour extraire les sous-chaîne des chaînes et de les rejoindre.

update INT 
    set Output= 'Success' 
    join [dbo].[table2] SHB 
    on concat(substring(INT.ID,1,3), '0', substring(INT.ID,14,8))=SHB.ID 
2

Vous pouvez simplement utiliser cette requête. Hypothèse - Le motif d'identification du tableau 1 reste le même.

SELECT a.ID, b.Location, 
CASE WHEN b.Location IS NOT NULL 
    THEN 'Success' ELSE 'Failed' END as Output 
FROM table1 a 
    LEFT JOIN table2 b 
     ON LEFT(a.ID,3) + '0' + SUBSTRING(a.ID,14,5) + 
        SUBSTRING(a.ID,19,3) = b.ID 

Si vous le souhaitez pour la requête de mise à jour ne

UPDATE a 
    SET Output = (CASE WHEN b.Location IS NOT NULL 
     THEN 'Success' ELSE 'Failed' END) 
      FROM table1 a 
     LEFT JOIN table2 b 
      ON LEFT(a.ID,3) + '0' + SUBSTRING(a.ID,14,5) + 
         SUBSTRING(a.ID,19,3) = b.ID