|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
здраствуйте, я новичок. читаю форумы, но нигде не могу найти такое решение: есть две таблицы дебет и кредит. делаю SELECT vr_k.*, vr_d.* FROM vr_k left JOIN vr_d ON vr_d.tnom=vr_k.tnom INTO CURSOR vr_o READWRITE ORDER BY 1 у меня получается дублируются записи. как сделать так, чтобы они были по одной? т.е. если строк дебета больше, чем кредита, то в кредите пусть будет пусто и наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 16:05 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
упор на колонку sm_k и sm_d ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 16:05 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka, Репо-данные приведите, как должно выглядеть, то самому писАть код ломает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 12:10 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
В качестве аналогии работы объединение по Join можно использовать вложенные циклы. Т.е. внешний цикл по первой таблице, а для каждой записи внутри цикла делается внутренний цикл по второй таблице с наложенным фильтром в виде условия объединения Предположим, у Вас по дебету есть 3 записи с одним и тем же значением поля tnom, а по кредиту таких записей 2. Представьте себе, что произойдет, если применить аналогию вложенных циклов 1. Берем первую запись со значением tnom = 1846 2. Организуем перебор записей по второй таблице с тем же значением tnom = 1846. Таких записей 2. Т.е. получили 2 записи в выборке 3. Берем вторую запись со значением tnom = 1846 4. Организуем перебор записей по второй таблице с тем же значением tnom = 1846. Получаем те же самые записи, что были на шаге 2. Т.е. имеем дубль 5. Берем третью запись со значением tnom = 1846 6. Организуем перебор записей по второй таблице с тем же значением tnom = 1846. Получаем те же самые записи, что были на шаге 2. Т.е. имеем еще один дубль В целом, в результирующей таблице будет произведение количества записей с одинаковым условием объединения. 3 записи в первой таблице умножаем на 2 записи во второй. В результирующей имеем 3*2 = 6 записей Как исключить дубли? Есть 2 варианта решения 1. Исключить дубли до выборки. Т.е. сначала по каждой таблице в отдельности сделать выборку с группировкой по полю tnom и суммированием остальных полей. А затем объединить уже эти две выборки, зная, что дублей в них нет Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
FULL JOIN - это как раз чтобы было "и наоборот"... 2. Надо включить в условие объединения другие поля, которые позволят однозначно определить какую запись одной таблицы следует сопоставить с какой записью второй таблицы. Но это не всегда возможно. Насколько я вижу по картинке, здесь такой вариант невозможен Если же у Вас стоит задача просто "сложить" две таблички "как в Excel" (два листа рядом положить), то в FoxPro через Select-SQL это невозможно. Такое придется делать "вручную" именно что через вложенные циклы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:55 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
ВладимирМ, спасибо за подробный ответ. Я в общем то похожее и делала, искала повторяющуюся запись и просто удаляла ее... а хотелось как в экселе)... в вашем примере плохо то, что там суммируются данные, а мне надо по каждой сумме отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 09:06 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
PaulWist, вот примерно так ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 09:11 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 09:14 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Если все поля повторяющихся записей одинаковые, то просто добавьте Distinct в итоговую выборку. Например, если у вас таблица table1 с содержимым: name agevasia 18petia 20inna 54vasia 18inna 54 Код: sql 1.
вернет вам: name agevasia 18petia 20inna 54 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 11:51 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen, там джоином присоединяются не получается одинаковых записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 12:54 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
ВладимирМ выше все детально описал, и по идее у вас не должно быть дублирования, возможно у вас соединение таблиц производится не по уникальному ключу. Попробуйте разобраться с командой select и понять как производится выборка и объединение, чтобы вы могли самостоятельно анализировать ваши данные (Если найдете материал подходящий, то думаю займет не более недели, а может и меньше). вот тут посмотрите картинку с типами объединения - ( https://data-lessons.github.io/gapminder-R/12-joins.html) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 12:56 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Если хотите могу попробовать написать запрос. Покажите, что у вас лежит в таблице vr_k и таблице vr_d (все данные не нужно, только те, где tnom = 1846). Желательно с фамилиями - можете их заменить на псевдонимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:08 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Отмена, можете не сбрасывать данные. У вас там получается, что в первой таблице 2 записи с tnom = 1846, а во второй 3 записи с tnom = 1846. Немного стало понятно, что вы хотите сделать, но не понятно, зачем такое объединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:22 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
В первой таблице у вас есть: tnomsm_k1846 476.751846 40.14 во второй: tnomsm_d1846 21.791846 18.161846 0.19 другие поля и данные опустим. для всех типов объединений у вас получится одинаковый результат: tnom_a sm_k tnom_b sm_d 1846 476.75 1846 21.791846 476.75 1846 18.161846 476.75 1846 0.191846 40.14 1846 21.791846 40.14 1846 18.161846 40.14 1846 0.19 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:36 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
А Вы наверное хотите получить такой результат?: tnom_a sm_k tnom_b sm_d1846 476.75 1846 21.791846 40.14 1846 18.161846 0 1846 0.19 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:47 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
ИМХО тут SQL не уместен, исходные данные не нормализованы. Надо создавать таблицу под результат, делать скан исходных таблиц и заполнять результирующую. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:50 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Максимум что можно - слить в одну таблицу с помощью UNION и дальше с ней работать Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:54 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Возможно Вы выбрали неправильный способ решения задачи. Вверху Вы написали про Excel и пытаетесь переложить его функционал на таблицу Foxpro, а они немного отличаются, и то, что подходит для Excel, может не подойти для Foxpro. Напишите, что вы хотите сделать с итоговыми данными, и возможно вам тут подскажут как это сделать средствами Foxpro. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 13:58 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
по типам объединения мне подходит full join, но он почему то не срабатывает и записи дублируются. а ключ там только один это табельный номер tnom ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:10 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen, такое обьединение мне нужно для вывода отчета в один курсор а потом либо в эксель либо в репорт фоксовский одни махом, как говорится ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:13 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka по типам объединения мне подходит full join, но он почему то не срабатывает и записи дублируются Потому что он тебе не подходит и работает так как должен работать 22099572 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:15 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen А Вы наверное хотите получить такой результат?: tnom_a sm_k tnom_b sm_d1846 476.75 1846 21.791846 40.14 1846 18.161846 0 1846 0.19 да, именно это мне и надо. это все делается в foxpro. про эксель я написала, чтоб для примера как хотелось бы... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:16 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka по типам объединения мне подходит full join, но он почему то не срабатывает и записи дублируются. а ключ там только один это табельный номер tnom Он срабатывает, но только не так, как вы ожидаете. Это то что я писал выше про Excel. Так если вы привыкли забивать гвозди молотком, а потом вам дают шурупы(которые вроде как похожи на гвозди), вам не надо их забивать, а нужно взять отвертку. Что вы хотите сделать с итоговой таблицей:Вывести в отчет ? Показать пользователю на форме или что то еще ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:16 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen,да, вывести в отчет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:22 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka faustgreen,да, вывести в отчет Я обычно в Excel вывожу. Для вашего примера сделал бы следующее: 1). Получил бы набор уникальных tnom: Код: sql 1.
2). Потом используя scan по таблице table1 выводил бы данные в отчет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:34 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen hOlushka faustgreen,да, вывести в отчет Я обычно в Excel вывожу. Для вашего примера сделал бы следующее: 1). Получил бы набор уникальных tnom: Код: sql 1.
2). Потом используя scan по таблице table1 выводил бы данные в отчет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
извините за назойливость, но * вставляем данные в нужные строки. это куда именно? в какойто промежуточный курсор? и если будет 2 строки с одинаковым tnom но с разными суммами? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:48 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Это набросок, может где-то ошибся: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:52 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Если не знаете как работать с Excel из FoxPro, посмотрите например в книге Visual FoxPro 9.0. . Или погуглите в сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:59 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
faustgreen, спасибо большое, буду пробовать и изучать) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:10 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Вот вам простой пример, который вы можете скопировать и запустить: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Он довольно примитивный, но вы так быстрее поймете суть, ну а дальше копайте ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:12 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Как вариант, чтобы получить полноценный ключ, добавить поле с номером записи row tnomrowsm_k18461476.751846240.14 во второй: tnomrowsm_d1846121.791846218.16184630.19 т.е. row внутри каждого значения tnom начинается с 1 Тогда Код: sql 1.
даст то что требуется hOlushka faustgreen А Вы наверное хотите получить такой результат?: tnom_a sm_k tnom_b sm_d1846 476.75 1846 21.791846 40.14 1846 18.161846 0 1846 0.19 да, именно это мне и надо. это все делается в foxpro. про эксель я написала, чтоб для примера как хотелось бы... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:28 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Dima T Как вариант, чтобы получить полноценный ключ, добавить поле с номером записи row tnomrowsm_k18461476.751846240.14 во второй: tnomrowsm_d1846121.791846218.16184630.19 т.е. row внутри каждого значения tnom начинается с 1 Тогда Код: sql 1.
даст то что требуется hOlushka пропущено... да, именно это мне и надо. это все делается в foxpro. про эксель я написала, чтоб для примера как хотелось бы... вот что олучается, тогда надо id и tnom чтобы были одинаковые у двух таблиц... я так понимаю, связать их..... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:51 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka, Вы неправильно поняли, Dima T, предлагал проставить ID не для всей таблицы, а для каждого tnom: tnom id1486 11486 21486 31503 11503 21556 11600 11600 21600 31600 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:00 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
hOlushka вот что олучается, тогда надо id и tnom чтобы были одинаковые у двух таблиц... я так понимаю, связать их..... Внимательнее читать надо, я же писал "row внутри каждого значения tnom начинается с 1" т.е. так tnomrowsm_k18461476.751846240.14 304815.403048228.804024112.30 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:01 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
Dima T hOlushka вот что олучается, тогда надо id и tnom чтобы были одинаковые у двух таблиц... я так понимаю, связать их..... Внимательнее читать надо, я же писал "row внутри каждого значения tnom начинается с 1" т.е. так tnomrowsm_k18461476.751846240.14 304815.403048228.804024112.30 ой, не внимательно, точно... помню такое было... счас поробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:03 |
|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#18+
всем ОГРОМНОЕ СПАСИБО!!! все получилось. вот результат. То, что мне и надо было. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:46 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1581576]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 183ms |
0 / 0 |