powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соотнесение данных
3 сообщений из 3, страница 1 из 1
Соотнесение данных
    #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
Соотнесение данных
    #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
Соотнесение данных
    #39911858
Oomel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, огромное спасибо.
Праздники - зло... До такого простого решения не додумался...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соотнесение данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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