Untitled
unknown
plain_text
9 months ago
4.0 kB
3
Indexable
Never
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:00
Leave a Comment