Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соотнесение данных / 3 сообщений из 3, страница 1 из 1
09.01.2020, 06:47
    #39911822
Oomel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соотнесение данных
Добрый день! Всех с прошедшими праздниками!

Прошу помочь со следующей проблемой.
Существует две таблицы TBL1(PK,SUMMA,L_DOC) и TBL2(PK,SUMMA,L_DOC,L_TBL1).
PKSUMMAL_DOC100020012000200130002001400020015000300160003001

PKSUMMAL_DOCL_TBL1120010220010320010420010530010630010

Записи в TBL2 создавались на основании записей в TBL1 с отношением 1:1, однако, в результате программной ошибки ссылка TBL2.L_TBL1 не заполнилась.

Необходимо распределить записи из TBL2 по записям из TBL1 с учетом следующих условий: TBL2.L_DOC = TBL1.L_DOC and TBL2.SUMMA= TBL1.SUMMA. В разрезе одинаковых сумм не имеет значения на какую запись из TBL1 будет ссылаться TBL2.
Полагаю, что тут нужно использовать рекурсивное CTE, однако после праздников что-то мне очень туго соображается...

Microsoft SQL Server 2017 - 14.0.3192.2 (X64)

Заготовка для запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
create table #TBL1(PK int,SUMMA int,L_DOC int); 
create table #TBL2(PK int,SUMMA int,L_DOC int,L_TBL1 int);

with dta (PK,SUMMA,L_DOC) as (
  select 1000,200,1 union
  select 2000,200,1 union
  select 3000,200,1 union
  select 4000,200,1 union
  select 5000,300,1 union
  select 6000,300,1
)
insert into #TBL1
SELECT * FROM dta;

with dta (PK,SUMMA,L_DOC,L_TBL1) as (
  select 1,200,1,0 union
  select 2,200,1,0 union
  select 3,200,1,0 union
  select 4,200,1,0 union
  select 5,300,1,0 union
  select 6,300,1,0
)
insert into #TBL2
SELECT * FROM dta;



DROP TABLE #TBL1;
DROP TABLE #TBL2;
...
Рейтинг: 0 / 0
09.01.2020, 07:55
    #39911832
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соотнесение данных
Ну например

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WITH 
cte1 AS (SELECT PK,SUMMA,L_DOC, ROW_NUMBER() OVER (PARTITION BY SUMMA,L_DOC ORDER BY SUMMA) rn FROM #TBL1),
cte2 AS (SELECT PK,SUMMA,L_DOC,L_TBL1, ROW_NUMBER() OVER (PARTITION BY SUMMA,L_DOC ORDER BY SUMMA) rn FROM #TBL2)
UPDATE cte2
SET cte2.L_TBL1 = cte1.PK
FROM cte2
JOIN cte1 ON cte1.SUMMA=cte2.SUMMA
         AND cte1.L_DOC=cte2.L_DOC
         AND cte1.rn=cte2.rn


fiddle
...
Рейтинг: 0 / 0
09.01.2020, 09:31
    #39911858
Oomel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соотнесение данных
Akina, огромное спасибо.
Праздники - зло... До такого простого решения не додумался...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соотнесение данных / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]