-1
votes

Menuez des tables basées sur une clé de 6 ou 7 chiffres dans la 1ère table avec une clé de 7 chiffres dans la deuxième table à l'aide de la case et de la fonction max.

Tableau 1: xxx

Tableau 2: xxx

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.


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

1
votes

Je voudrais juste rejoindre l'utilisation d'utiliser comme : xxx

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.


0 commentaires

0
votes

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 + '%'


0 commentaires