Untitled
unknown
plain_text
2 years ago
4.0 kB
13
Indexable
DROP TABLE IF EXISTS #KP_CommonClientsOkved; -- подтягиваем оквэды к таблице с клиентами, которые есть и у нас, и у дилеров
SELECT ccl.agent_inn_dil, ccl.client_inn_dil, ccl.client_name_dil, ccl.client_name_GZPN, okved.[ИНДЕКС]
INTO #KP_CommonClientsOkved
FROM #CommonClients ccl
LEFT JOIN [SANDBOX_DB_TEAM_21].[dbo].[Med_Okved] okved
ON ccl.client_inn_dil=okved.[ИНН]
GROUP BY
ccl.agent_inn_dil,
ccl.client_inn_dil,
ccl.client_name_dil,
ccl.client_name_GZPN,
okved.[ИНДЕКС]
-- посмотрим на получившуюся таблицу, видим много пропусков
--SELECT * FROM #CommonClients
--GROUP BY agent_inn_dil, client_inn_dil, client_name_dil, client_name_GZPN
--SELECT count(client_inn_dil) FROM #KP_CommonClientsOkved --1083 строк
--SELECT count(DISTINCT client_inn_dil) FROM #KP_CommonClientsOkved -- 906 уникальных инн
--SELECT count(*) FROM #KP_CommonClientsOkved WHERE agent_inn_dil IS NULL OR client_name_dil IS NULL -- 297 пропусков в данных
-------------------- попробуем восстановить--------------------
-- сперва agent_inn--
-- Шаг 1: Определение уникальных пар client_inn и agent_inn для каждого клиента уникальные агенты
WITH UniqueAgentPairs AS (
SELECT
client_inn,
agent_inn
FROM #vttr
GROUP BY client_inn, agent_inn
),
-- Шаг 2: Подсчет количества уникальных agent_inn для каждого client_inn
UniqueAgentCount AS (
SELECT
client_inn,
COUNT(agent_inn) AS UniqueAgentCount
FROM UniqueAgentPairs
GROUP BY client_inn
HAVING COUNT(agent_inn) = 1 -- Выбор client_inn с одним уникальным agent_inn - уникальное соотвествие
),
-- Шаг 3: Подготовка к обновлению, выборка нужных client_inn и соответствующих им agent_inn
AgentsToUpdate AS (
SELECT
uac.client_inn,
uap.agent_inn
FROM UniqueAgentCount uac
JOIN UniqueAgentPairs uap ON uac.client_inn = uap.client_inn
)
-- Обновление #KP_CommonClientsOkved
UPDATE kpc
SET kpc.agent_inn_dil = atu.agent_inn
FROM #KP_CommonClientsOkved kpc
JOIN AgentsToUpdate atu ON kpc.client_inn_dil = atu.client_inn
WHERE kpc.agent_inn_dil IS NULL;
-- проверка
--SELECT * FROM #KP_CommonClientsOkved WHERE #KP_CommonClientsOkved.client_inn_dil = '0275918765'
--SELECT * FROM #vttr WHERE #vttr.client_inn = '0275918765'
-- вроде ок
-- теперь client_name_dil--тут чуть проще, так как связь однозначная
UPDATE kpc
SET kpc.client_name_dil = reg.KONTRAGENT_NAIMENOVANIE
FROM #KP_CommonClientsOkved kpc
INNER JOIN #reg reg ON kpc.client_inn_dil = reg.KONTRAGENT_INN
WHERE kpc.client_name_dil IS NULL
-- проверка
--SELECT * FROM #KP_CommonClientsOkved WHERE #KP_CommonClientsOkved.client_inn_dil = '0275918765'
--SELECT * FROM #reg WHERE #reg.KONTRAGENT_INN = '0275918765'
-- вроде ок
-- добавим информацию по ОКВЭДАМ из [SANDBOX_DB_TEAM_21].[dbo].[GEN_OKVED]
--хочу заменить пропуски в ИНДЕКС на значения из NAIMENOVANIE_OKVED для соответствующих инн-----------------------------------------------------
UPDATE kpc
SET kpc.ИНДЕКС = go.NAIMENOVANIE_OKVED
FROM #KP_CommonClientsOkved AS kpc
INNER JOIN [SANDBOX_DB_TEAM_21].[dbo].[GEN_OKVED] AS go
ON kpc.agent_inn_dil = go.INN
WHERE go.VID_OKVED = 'Основной' and kpc.ИНДЕКС IS NULL;
Msg 8152, Level 16, State 30, Line 368
String or binary data would be truncated.
The statement has been terminated.
Completion time: 2024-02-05T16:50:56.5953046+03:00Editor is loading...
Leave a Comment