|
как обьединить таблицы чтобы не повторялись записи
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=41&fpage=5&tid=1581576]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 197ms |
0 / 0 |