Tableau 2: strong> p> chacun ID du tableau 1 peut avoir 1 ou plusieurs correspondances dans le tableau 2 en fonction des 6 premiers chiffres.
Par exemple 123123 à partir du tableau 1 correspondant 1231230, 1231231 et 1231232 dans le tableau 2.
J'essaie de créer une jointure pour correspondre au maximum ID2 du tableau 2 en fonction de l'ID1 du tableau 1. P> P>
3 Réponses :
Ceci est la solution de travail:
SELECT tb1.*,
MAX(tb2.[id2]) as id2
FROM [dbo].[table1] tb1
LEFT JOIN [dbo].[table2] tb2
ON CASE
WHEN LEN(tb1.[id1]) = 7 and tb1.[id1] = tb2.[id2] THEN 1
WHEN LEN(tb1.[id1]) = 6 and tb1.[id1] = SUBSTRING(tb2.[id2],1,6) THEN 1
ELSE 0
END = 1
GROUP BY tb1.id1
,tb1.data1
ORDER BY tb1.id1 desc
Je voudrais juste rejoindre l'utilisation d'utiliser Cette approche pourrait toujours laisser ouvrir la possibilité d'utiliser un index sur la deuxième table. Dans tous les cas, il est légèrement plus facile à lire que votre version. P> p> comme code>:
Vous pouvez également essayer aussi:
Declare @t table (id1 varchar(50) , data1 varchar(50)) insert into @t values (123123,'David') insert into @t values (123124,'Jan') insert into @t values (1231344,'Juro') Declare @t1 table (id2 varchar(50) , data2 varchar(50)) insert into @t1 values (1231230,'Info 1') insert into @t1 values (1231231,'Info 2') insert into @t1 values (1231232,'Info 3') insert into @t1 values (1231240,'Info 4') insert into @t1 values (1231241,'Info 5') insert into @t1 values (1231242,'Info 6') select * from @t a JOIN @t1 B on b.id2 like '%' + a.id1 + '%'