powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL Select как объеденить 2 разные таблицы
24 сообщений из 24, страница 1 из 1
SQL Select как объеденить 2 разные таблицы
    #32918974
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 165 отчетов есть пример как 2 отчета поместить в один. Там предлогается создать таблицу, в которой был бы признак GroupID. Когда в этом поле скажем 1, значит это первая таблица, когда 2, значит слкдующая. Далее в репорт дизайнере все это описывается через PrintWhen.
А я не знаю как мне объеденить мои таблицы, да еще и так чтоб появилось несуществубщее в обеих таблицах поле GroupID, да при этом оно еще и заполнялось 1ами или 2ками. Подскажите, плиз...

ЗЫ 8 версия ВФП.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   SELECT ;
	AbonPay.ab_code, ;
	AbonPay.PayCateg, ;
	AbonPay.abonent, ;
	AbonPay.talk_time, ;
	AbonPay.abonpay, ;
	AbonPay.intercalls, ;
	AbonPay.addpay, ;
	AbonPay.totalsuma, ;
	Abonents.ab_name as SName ;
   FROM AbonPay ;
   INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent ;
   INTO CURSOR curDetailPrn NOFILTER WHERE Abonpay.ab_code=ChosenAbCode ORDER BY AbonPay.abonent
это та первая часть, что мне нужна, тут еще надо добавить GroupID и его заполнить еденицами. А вторая часть в таблице OtherPay. Из нее мне нужно использовать поля ab_code, abonent, date, suma, comment, ну и добавить GroupID с двойками.
возможно мне всего лишь надо добавить
LEFT JOIN Otherpay ON Otherpay.abonent = AbonPay.abonent ; ?
а как тогда быть с Otherpay.abonent?
или что-то такое будет правильно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   SELECT ;
	AbonPay.ab_code, ;
	AbonPay.PayCateg, ;
	AbonPay.abonent, ;
	AbonPay.talk_time, ;
	AbonPay.abonpay, ;
	AbonPay.intercalls, ;
	AbonPay.addpay, ;
	AbonPay.totalsuma, ;
	Abonents.ab_name as SName, ;
             otherpay.abonent as OthpAbonent,;
             otherpay.date,;
             otherpay.suma,;
             otherpay.comment;
   FROM AbonPay ;
   INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent ;
   LEFT JOIN Otherpay ON Otherpay.abonent = AbonPay.abonent ; 
   INTO CURSOR curDetailPrn NOFILTER WHERE Abonpay.ab_code=ChosenAbCode ORDER BY AbonPay.abonent
??????

тока как быть здесь с GroupID и его заполнением?
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919019
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова привет, Стас-Ко!

Короче, делай так:
Select 1 as GroupID,список полей из первой таблицы ;
FROM первая таблица и всякие там Inner, left, Where Order и т.д. ;
Union ALL ( Select 2 as GroupID,список полей из второй таблицы ;
FROM вторая таблица и всякие там Inner, left, Where Order и т.д. ) Into Cursor curDetailPrn
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919031
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и еще, когда используешь Union, то обязательно список полей из первой таблици по формату и порядку следования должен соответсвовать списку полей из второй таблицы.

И может подскажешь мне, в порядке обмена опытом, как вы там вставляете фрагментики кода, так чтобы все было красиво написано с табуляцией и т.д.? А то у меня получается вставка обыкновенного текста и все очень не читабельно!
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919068
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, спасибо, ща буду пробывать. тока я боюсь что это больно похоже на вложенные запросы, а они не проходят в 8 версии.

Я еще и сам не все вкурил. Но. Красиво втулить код проги это просто - когда месагу мылишь там есть смайлики, затем Тема, заетем B I U и т.д.
дык вот SRC - это для кода. А вот для чего точка, FIX, QUOTE, 1,2,3,4,5, SUP, CSV я еще и сам не знаю :(
догадываюсь только что QUOTE - это цитировать
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919076
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо - далее попробую быть нагляднее...
А что касается вложенных запросов, то это они и есть, просто я не знал, что в восьмерке они не проходят, я то пока на ВФП5.0 сижу, только только собираюсь перейти на 8.0. Так что извиняйте!
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919090
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNION это не вложенный запрос, так что в скобки его можно не брать
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919095
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Означает ли это, что в восьмерке все будет ОК с вопросом, который задавал Стас-Ко?
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919102
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и по ходу еще вопрос, я его тут задавал, но толком никто не ответил, не знаешь как мона замутить печать отчета только Четных страниц, или только нечетных, или по заданому маршруту, типа 1,5,10,16,43 - как, например, это реализовано в ворде. дело в том, что так очень удобно печатать двухсторонние документы - сначала даешь Четные страницы, затем переворачиваешь и нечетные. иначе каждый листок по ходу печати надо самому вертеть, а это черевато не только минингитом, но и глюками принтера - не любит он когда у него каждую страницу бамага кончается, а потом появляеЦЦа, он тогда уходит в даун и чепятатет бред всякий и очень долго, потому как там часто встречаются управляющие последовательности, типа выплюнь лист, возьми следующий...
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919109
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kms_Означает ли это, что в восьмерке все будет ОК с вопросом, который задавал Стас-Ко?

"Усе будет ОК" (с) Бриллиантовая рука
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919133
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOи по ходу еще вопрос, я его тут задавал, но толком никто не ответил, не знаешь как мона замутить печать отчета только Четных страниц, или только нечетных, или по заданому маршруту, типа 1,5,10,16,43 - как, например, это реализовано в ворде. дело в том, что так очень удобно печатать двухсторонние документы - сначала даешь Четные страницы, затем переворачиваешь и нечетные. иначе каждый листок по ходу печати надо самому вертеть, а это черевато не только минингитом, но и глюками принтера - не любит он когда у него каждую страницу бамага кончается, а потом появляеЦЦа, он тогда уходит в даун и чепятатет бред всякий и очень долго, потому как там часто встречаются управляющие последовательности, типа выплюнь лист, возьми следующий...

Точно не скажу, проблемы такой не стояло.
Но думаю примерно так (правда геморойный это процесс):
1. Первый прогон в пустышку, чтобы узнать количество страниц
2. Два вложенных цикла. Первый от 1 до 2, второй по количеству страниц, проверкой номера страницы на четность/нечетность, вывод отчета с опцией RANGE, где указать номер страницы.
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919181
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПРИНТЕР С ДУСТОРОННЕЙ ПЕЧАТЬЮ - вот решение вопроса
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919189
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот какую байду я накатал
Код: plaintext
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.
   SELECT ;
     1  as ReportID,;
	AbonPay.ab_code, ;
	AbonPay.PayCateg, ;
	AbonPay.abonent, ;
	AbonPay.talk_time, ;
	AbonPay.abonpay, ;
	AbonPay.intercalls, ;
	AbonPay.addpay, ;
	AbonPay.totalsuma, ;
	Abonents.ab_name as SName, ;
    otherpay.abonent as OthpAbonent,;
    otherpay.date,;
    otherpay.suma,;
    otherpay.comment;
   FROM AbonPay ;
   INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent ;
   WHERE Abonpay.ab_code=ChosenAbCode;
   UNION ALL ;
   SELECT ;
     2  as ReportID,;
    AbonPay.ab_code, ;
	AbonPay.PayCateg, ;
	AbonPay.abonent, ;
	AbonPay.talk_time, ;
	AbonPay.abonpay, ;
	AbonPay.intercalls, ;
	AbonPay.addpay, ;
	AbonPay.totalsuma, ;
	Abonents.ab_name as SName, ;
    otherpay.abonent as OthpAbonent,;
    otherpay.date,;
    otherpay.suma,;
    otherpay.comment;
   FROM OtherPay ;
   WHERE otherpay.ab_code=ChosenAbCode;
   INTO CURSOR curDetailPrn NOFILTER

теперь не знаю куда вставить ORDER BY AbonPay.abonent
и результат меня несколько удивил
получилось так как я и хотел, но одна загвоздка, на протяжении всего ReportID=1 слева у меня в таблице все пучтом, а справа все забито первой записью из второй таблицы, оно бы ничего, но потом, когда ReportID становится равным 2, эту запись я пропущу, т.к. далее у меня все идет со следующей записи, а слева уже повторяется последняя запись из первой таблицы.
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919212
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понимаю, то в первом запросе ты используешь данные из таблиц:
AbonPay
OtherPay
Abonents
так вот связь между AbonPay и Abonents ты устанавливаешь:
Код: plaintext
INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent 
OtherPay как остается неприкаянной, тот же момент и во втором запросе...

Проверь думаю, что проблема с этим и связана.
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919215
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все нормально, я не доглядел просто. когда ReportID=1 справа все забито первой попавшейся записью, а когда ReportID=2, то слева - последней в таблице. Вообще мог бы и NONE проставить, или это я ему об этом сказать должен?
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919235
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot kms_]Если я правильно понимаю, то в первом запросе ты используешь данные из таблиц:
AbonPay
OtherPay
Abonents
так вот связь между AbonPay и Abonents ты устанавливаешь:
Код: plaintext
INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent 
OtherPay как остается неприкаянной, тот же момент и во втором запросе...
[quot]
Не, сначала AbonPay и Abonents, а затем уже OtherPay.

куда мне ордер вставлять - прога его не ест никак? по хелпам написано что в конце он должен быть, а если так и сделать то во время исполнения ругается что Order Clause is invalid...
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919245
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конце ORDER BY 2. Двойка - номер поля в запросе
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919271
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СТАС-КОНе, сначала AbonPay и Abonents, а затем уже OtherPay.

Когда я писал предыдущее сообщение я не имел ввиду порядок следования таблиц в запросе, я имел ввиду, что таблица OtherPay в запросе ни с какой другой не связана, то есть нет критерия по которому бы определялась какая запись из таблицы OtherPay соотвествует записи из таблицы AbonPay...

то есть, как мне кажется, должно быть нечто подобное:

Код: plaintext
1.
2.
3.
Select поля из AbonPay,Abonents,OtherPay ;
 FROM AbonPay ;
   INNER JOIN Abonents ON Abonents.abonent = AbonPay.abonent ;
   INNER JOIN OtherPay ON и условие

то есть, я считаю, что проблема связана с отсутствием этой самой связи, которую я сейчас указал последней, а во втором запросе вообще связи не устанавливаются между таблицами. Хотя я допускаю, что не до конца владею ситуацией и может что-то недопонимаю.

А что касается Order, то у меня все работает, причем как внутри каждого запроса в отдельности, так Order обоих запросов вместе, в зависимости от ситуации, однако следует отметить, что скобки с Union я все же использую.
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919409
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне, понимаешь, надо так соеденить таблицы, чтобы как бы шахмоткой выглядело. То есть, сначала идет левый блок свзязанные таблицы AbonPay и Abonents, все по условию для одного ab_code=ChosenAbCode; правый блок пустой. Затем следует выборка из Otherpay по тому же условию для одного ab_code=ChosenAbCode, только здесь уже левый блок пустой, а правый заполненный. Суть в том, что это две РАЗНЫЕ таблицы, просто для репорта надо чтоб они шли подряд в одной, только по ReportID можно расчехлить где какая.
Прикол разности таблиц в том, что в первом куске записи с одним и тем же значением abonent не повторяются, а в Otherpay могут повторяться. Поэтому когда объеденяешь не шахматкой, как у меня и получилось, а все в один как бы блок, то выходит что некотрые записи повторяются, благодаря Otherpay.
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919416
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще всего объясню так - есть таблицы А и Б, надо получить В так чтобы было в нем такое расположение:
А
Б
а не
АБ
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32919423
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, ну тогда понятно, а то я пристал к человеку нет связи - нет связи.

P.S. И как вставить этот чертов смайлик прямо в текст?
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32920978
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да хрен его знает как смайло вставить
это просто типа для пунктов
Код: plaintext
1.
2.
3.
4.
5.
 FIXED как я разобрался нуж0н для того, чтобы в тексте не съедало пробелы слева:
   лдвжа
вап
 павап
    рпа р па

1,2,3,4,5 для задания размеров
размер1
размер2
размер3
размер4
размер5

кто такой SUP и зачем он нужен - так и не понятно

а это текст в CSV так выглядит
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32921427
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эт и я методом научного тыканья определил, а вот смайлы этому методу познания не поддаются, блин.......
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32921445
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай здесь. В отзывах на статью

http://www.sql.ru/faq/faq_topic.aspx?fid=202
...
Рейтинг: 0 / 0
SQL Select как объеденить 2 разные таблицы
    #32921452
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, вот! Всегда приятно иметь дело с людьми знающими! Премного вам благодарен.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL Select как объеденить 2 разные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]