Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
sub zero -275
Guest |
;with t0 as ( select 'Иванов' as [фамилия], 'Иван' as [имя], 'Иванович' as [отчество] union all select 'Сидоров' as [фамилия], 'Сидор' as [имя], 'Сидорович' as [отчество] union all select 'Петров' as [фамилия], 'Петр' as [имя], 'Петрович' as [отчество] ), t1 as ( select 'Иванович' as [part1], 'Иванов' as [part2], 'Иван' as [part3], 'HG-8UVA' as id union all select 'Сидоров' as [part1],'Сидорович' as [part3], 'CM-11BV50A' as id union all select 'Петров' as [part1], 'Петр' as [part2], 'ER-4575NND' as id ) /* Нужно к таблице t0 приджойнить id-ки из t1 Как бы сделать красивее, кроме как перебором через OR предикатов в join. В таблице t1 перемешаны компоненты ФИО и не всегда есть имя и/или отчество. */ |
10 фев 15, 11:57 [17243484] Ответить | Цитировать Сообщить модератору |
Daba Member Откуда: Сообщений: 132 |
Не понятно что является ключом? Фамилия (которая не уникальна)? |
10 фев 15, 12:04 [17243539] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Если Иванович может быть и фамилией и отчеством, то как сравнивать то ? |
||
10 фев 15, 12:07 [17243565] Ответить | Цитировать Сообщить модератору |
sub zero -275
Guest |
Считаем что фамилия известна всегда и точно будет среди трех колонок part1, part2, part3. Имя и отчество не всегда. Надо поджойнить хотя бы приблизительно. Чем больше совпало - тем больше вероятность правильности. Задача разовая "данных" много. Хочу сократить ручной труд. |
||||
10 фев 15, 12:16 [17243631] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
sub zero -275, А чем через OR не устроило? Тем боее, раз вещь - разовая. Чего уж тут о красоте суетиться? |
10 фев 15, 12:18 [17243644] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Что в t1 есть Фамилия, если по вашим словам "В таблице t1 перемешаны компоненты ФИО" ? |
||
10 фев 15, 12:19 [17243648] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
;with t0 as ( select 'Иванов' as [фамилия], 'Иван' as [имя], 'Иванович' as [отчество] union all select 'Сидоров' as [фамилия], 'Сидор' as [имя], 'Сидорович' as [отчество] union all select 'Петров' as [фамилия], 'Петр' as [имя], 'Петрович' as [отчество] ), t1 as ( select 'Иванович' as [part1], 'Иванов' as [part2], 'Иван' as [part3], 'HG-8UVA' as id union all select 'Сидоров' as [part1],null as [part2],'Сидорович' as [part3], 'CM-11BV50A' as id union all select 'Петров' as [part1], 'Петр' as [part2],null as [part3], 'ER-4575NND' as id ) select t0.*,t1.id from t0 join t1 on (t1.[part1] is null OR t1.[part1] in (t0.[фамилия],t0.[имя],t0.[отчество])) and (t1.[part2] is null OR t1.[part2] in (t0.[фамилия],t0.[имя],t0.[отчество])) and (t1.[part3] is null OR t1.[part3] in (t0.[фамилия],t0.[имя],t0.[отчество])) |
10 фев 15, 12:20 [17243660] Ответить | Цитировать Сообщить модератору |
Иванов-Сидоров
Guest |
sub zero -275, больше похоже на outer apply с top 1, в order by сортировка по суррогатной цифре "максимальная вероятность совпадения" |
10 фев 15, 16:07 [17245262] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |