|
Сравнить 2 таблицы значений | ☑ | ||
---|---|---|---|---|
0
diabolo
13.07.16
✎
15:14
|
Добрый день. Подскажите как можно сравнить 2 таблицы значений чтобы выдавалось в итоге: строка1 пункт 1 1 таблицы не равен пункту 1 второй таблицы и т.д. Количество пунктов будет ограничено, аблица значений получается из ексель файла не отсортированого.
Пробовал запихнуть в запрос 2 таблицы и там сравнивать, но что то я не понял по чем и как связать между собой 2 таблицы. Чтобы потом просто проверять выбором если пункт 1_1 = пункту 1_2 тогда все ок, иначе несоответсвие. и выводить после всего только поля у которых несоотвествие, может есть проще варианты подскажите? |
|||
1
Зая Бусечка
13.07.16
✎
15:15
|
Запрос, полное объединение по пункт_1
|
|||
2
diabolo
13.07.16
✎
15:19
|
(1) Что в итоге получим? на пункт 1 например 10 строк в первой таблице и на пункт 1 20 строк второй таблицы, плюс 6 строк второй таблицы совпадают польностью по всем другим полям с первой таблицей.
|
|||
3
Зая Бусечка
13.07.16
✎
15:20
|
(2) где не есть NULL
|
|||
4
diabolo
13.07.16
✎
15:59
|
(3) Что то в итоге получается? Какое поле не есть нут Пункт_1?
Слабовато я что то представляю :( |
|||
5
Serginio1
13.07.16
✎
16:02
|
||||
6
diabolo
13.07.16
✎
16:12
|
(5) Там что то не понятное со знаками. Нужно пройти все записи 2-х таблиц и сравнить их построчно. причем 1 строка 1-й таблицы может совпадать с 99 строкой 2-й таблицы полностью, или отличатся одним или несколькими другими полями.
|
|||
7
diabolo
13.07.16
✎
16:14
|
(6) вот как именно понять что для 1 строки 1 таблицы соответствует 99 строка 2-й таблицы, причем значения первого пункта первой таблицы может совпадать с другими
строками этой же таблицы. |
|||
8
diabolo
13.07.16
✎
16:22
|
Привожу пример:
Таблица1 НомерИзделия НомерДокумента Сумма 00001 1 500 00002 2 500 00001 3 400 Так как в процессе эти файлы могли измениться то мог поменятся и номер документа и сумма. Таблица2 НомерИзделия2 НомерДокумента2 Сумма2 00001 5 501 00002 2 505 00001 3 400 В итоге должно быть найдено что 1 строка 1-й таблицы соответсвует 1-й строке 2-й таблицы (но это может быть и 99 строка), чтобы потом в итоге написать что по 1 строке был изменен номер документа и сумма, по 2-й строке сумма, по 3 ничего не изменилось |
|||
9
Ildarovich
13.07.16
✎
16:40
|
(8) вам дали правильную ссылку. В терминологии той статьи "измерения" - это будет НомерИзделия. Таблицы будут стыковаться по значению в этой колонки.
То есть вызов должен быть таким: РазницаТаблицЗначений(Таблица0, Таблица1, "НомерИзделия")
а сама функция может иметь вид: Функция РазницаТаблицЗначений(Таблица0, Таблица1, Измерения) Экспорт
Она вернет список строк. Измененная строка будет записана под исходной. |
|||
10
diabolo
13.07.16
✎
17:01
|
(9) Сделал по этому примеру. Для примера взял 3 строки в первой таблице и 2 строки в другой таблице, поменял во второй таблице в первой строке номер, во второй строке сумму. В итоге получил 5 строк 2 строки 1-й таблице со знаком один, 2 строки второй таблицы со знаком 0 и 5 строка 1 таблицы со знаком 0. Что поменялось неизвестно.
|
|||
11
Ildarovich
13.07.16
✎
17:26
|
Что же, оказалось, что форма представления результата вас не устраивает, можете переделать, информация о результатах сравнения вся в ответе есть:
Номер изделия Номер документа Сумма Знак 0001 000х 1 1 Это означает, что теперь строка для изделия "0001" такая 0001 0001 1 А была такая. Изменения видны друг под другом: старое значение снизу, новое сверху 0002 0002 х 1 0002 0002 2 0003 0003 3 Строка без пары означает, что этой строки в новой таблице нет. Она удалена. |
|||
12
Garykom
гуру
13.07.16
✎
17:42
|
(0) Это случаем не какая то система мониторинга файликами екселя рассылаемыми?
|
|||
13
Garykom
гуру
13.07.16
✎
17:43
|
(12)+ Файликов то скоко всего 2 или их многа-многа? :)
|
|||
14
ovrfox
13.07.16
✎
18:04
|
Вообще то сравнить две таблицы (значений) не тривиальная операция. Когда -то делал для журналирования документа.
Общий алгоритм такой : выбираются ключевые поля сравнения (можно все), назначается вес сравнения для каждого поля (можно 1). Сравниваются ключевые поля каждой строки с каждой и подсчитывается число похожести. Естественно, после выбора первой пары, она удаляется из сравнения. В конце получаем пары с некоим коэффициентом похожести. Пары с 0-вым или даже некоим положительным, но малым коэффициентом считаются различными. В моем случае все коэфициенты по 11 полям были 1, а по номенклатуре был 6. Если коэффициент был меньше 6 - то пара считалась различной. Таким алгоритмом достаточно точно определялись пары, сбоев не было замечено. |
|||
15
ovrfox
13.07.16
✎
18:08
|
(14) забыл сказать, что после вычисления числа похожести для каждой пары строк, список сравнения упорядочивался по убыванию числа похожести и для пары, которая бралась первой, потом вычеркивались остальные строки сравнения, содержащие одну из строк.
|
|||
16
diabolo
14.07.16
✎
08:06
|
(11) спс что расписали, но порядок вывода строк был немного другой, о том что я писал в(10), ну даже с этим все равно, просто результат который предоставился, не зная что было изменео, приходится пересматривать все поля, чтобы найти что же все таки разошлось. спс за информацию.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |