СОЕДИНЕНИЕ таблиц на основе 6 или 7-значного ключа в 1-й таблице с 7-значным ключом во второй таблице с использованием функций CASE и MAX - PullRequest
0 голосов
/ 15 октября 2019

Таблица 1:

Id1 Data1
123123  David
123124  Jan
1231344 Juro
1234126 Marco

Таблица 2:

Id2 Data2
1231230 Info 1
1231231 Info 2
1231232 Info 3
1231240 Info 4
1231241 Info 5
1231242 Info 6

Каждый идентификатор из таблицы 1 может иметь 1 или более совпаденийв таблице 2 на основе первых 6 цифр. Например, 123123 из Таблицы 1 соответствует 1231230, 1231231 и 1231232 в Таблице 2. Я пытаюсь создать соединение, чтобы соответствовать максимальному id2 из Таблицы 2 на основе id1 из Таблицы 1.

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Я бы просто присоединился, используя LIKE:

SELECT
    tb1.id1,
    tb1.data1
    MAX(tb2.[id2]) AS id2
FROM [dbo].[table1] tb1
LEFT JOIN [dbo].[table2] tb2
    ON tb2.[id2] LIKE CONCAT(tb1.[id1], '%')
GROUP BY 
    tb1.id1,
    tb1.data1
ORDER BY
    tb1.id1 DESC;

Этот подход все еще может оставить открытой возможность использования индекса для второй таблицы. В любом случае, его немного легче читать, чем вашу версию.

0 голосов
/ 15 октября 2019

Вы также можете попробовать это:

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 голосов
/ 15 октября 2019

Это рабочий раствор:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...