powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите организовать запрос
8 сообщений из 8, страница 1 из 1
Помогите организовать запрос
    #32935295
bobit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, организовать команду (SELECT) извлечения данных из PAS.DBF (FPD).

PAS.DBF :
NUM C(4)
VAR C(6)
PAS C(3)
Значения поля PAS.NUM не любые, а где-нибудь и как-нибудь предопределены.
Например: ОДИН,ДВА,ТРИ, как в примере ниже, но это, как говорится, не предел.

---------------------------
|NUM.....|VAR.....|PAS|
---------------------------
|ОДИН..|ВАСЯ...|123|
|ДВА.....|ПЕТЯ....|123|
|ТРИ.....|МАША...|123|
|ОДИН..|КУЗЬМА|222|
|ДВА.....|ИГОРЬ..|222|
|ДВА.....|ДАВИД..|333|
|ТРИ.....|ЮРА......|333|
|ОДИН..|ИРА.......|222|
|ТРИ.....|ВАСЯ....|222|
|ТРИ.....|КУЗЬМА|123|
|ДВА.....|ГРУША..|222|
|ОДИН..|ЛЕНА.....|333|
|ОДИН..|ЖОРА...|123|
|.............|...............|.......|

так, чтобы в результате создался курсор, например SPISOK:
--------------------------------------------------------
|N1..........|N2.........|N3........|Nn.......|PAS|
--------------------------------------------------------
|ВАСЯ....|ПЕТЯ...|МАША...|..........|123|
|КУЗЬМА|ИГОРЬ|...............|..........|222|
|..............|ДАВИД.|ЮРА......|..........|333|
|ИРА......|..............|ВАСЯ....|..........|222|
|..............|..............|КУЗЬМА|..........|123|
|..............|ГРУША.|...............|..........|222|
|ЛЕНА....|..............|...............|..........|333|
|ЖОРА..|..............|...............|..........|123|
|..............|..............|...............|..........|.......|

то есть неповторяющиеся значения поля PAS.NUM - это в своём роде имена полей в SPISOK, но дать имена последним по значению первых я, разумеется, не могу. Русскими они бывают.
Значение поля SPISOK.Nn - это значение поля PAS.VAR в зависимости от значения PAS.NUM. Так, например, если PAS.NUM="ТРИ" и PAS.VAR="ВАСЯ" в одной записи, то SPISOK.N3="ВАСЯ".
Что такое PAS.PAS? А это, млин, собственно, ответ на вопрос "Кто?" или "Чьих будете?".
И вот меня "переклинило"... Процедурой сделал, но как-то "тяжело" вышло.
Помогите мне, Бога ради с SELECT-ом. А то уж, знаете ли, обкурился весь, соображая как это сделать.
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32935492
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi bobit!

Посмотри в сторону XTAB - т.е. перекрёстных запросов - их можно даже в
дизайнере запросов сделать.
И не бойся русских имён полей :) Ну сделает их vfpxtab ну и чёрт с ними :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32936001
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это совпадение или так и есть
т.е. лишнее выкидывать ?
---------------------------
|NUM.....|VAR.....|PAS|
---------------------------
|ОДИН..|ВАСЯ...|123|
|ДВА.....|ПЕТЯ....|123|
|ТРИ.....|МАША...|123|
|ОДИН..|КУЗЬМА|222|
|ДВА.....|ИГОРЬ..|222|
|ДВА.....|ДАВИД..|333|
|ТРИ.....|ЮРА......|333|
|ОДИН..|ИРА.......|222|
|ТРИ.....|ВАСЯ....|222|
|ТРИ.....|КУЗЬМА|123|
|ДВА.....|ГРУША..|222|
|ОДИН..|ЛЕНА.....|333|
|ОДИН..|ЖОРА...|123|
|.............|...............|.......|
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32940025
bobit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor KorolyovИ не бойся русских имён полей
А я их и не боюсь. Чего это мне их бояться? Я их опасаюсь. Ага.
Нет, ну... представляю, а чего будет если не "один", "два", "три" и т.д., но "Нашёл умного человека", ", а тот ложку в ухо", "так и норовит", "запихнуть.", "Нет, чтобы 1/2 той", " ан целую всовывает".
Что же касается уточняющего вопроса от leaf. Вы правы. Это я коряво вопросик задал. Ну-у, так я же тогда обкурился в муку. Простите ради всех святых, пожалуйста.
Дело такое. Пользователь (это те, которые в PAS.PAS), например, делает запросы по определённым полям (это те, которые в PAS.NUM) или переменным. Значения полей (или переменных для дальнейшего построения запроса) некоей формы регистрируются в таблице PAS (PAS.VAR). А задачка в том и состояла, чтобы "в горизонталь" (если так можно сказать) всю эту беду свести, да взглянуть на выгоду или недостатки от такой организации хранения. Ведь в PAS empty(PAS.поле)=.t. невозможно, а в SPISOK - имеются.
Лишнего в таблице PAS, к сожалению, вовсе нет.
Э-эх... Ладно, братки. Хотелось мне короче, но процедуркой сподобился. А может и впрямь кто-нибудь за труд не сочтёт, да содействие окажет мне, горемычному, а?
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32940170
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю исходная таблица:
NumVarPasОДИНВАСЯ123ДВАПЕТЯ123ТРИМАША123ОДИНКУЗЬМА222ДВАИГОРЬ222ДВАДАВИД333ТРИЮРА333ТРИВАСЯ222ОДИНЛЕНА333
Igor KorolyovПосмотри в сторону XTAB
Я посмотрел, а ты чего?
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT PAS.Pas, PAS.Num, PAS.Var;
    FROM '..\DATA_S\PAS.DBF' PAS;
    GROUP BY PAS.Pas, PAS.Num, PAS.Var;
    ORDER BY PAS.Pas, PAS.Num, PAS.Var;
    INTO CURSOR cur_one
DO (_GENXTAB) WITH 'Query',,,,,,,,,.t.
BROWSE NOMODIFY
Получается что-то вроде этого:
PasДваОдинТри123ПетяВасяМаша222ИгорьКузьмаВася333ДавидЛенаЮра

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32940626
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobitНет, ну... представляю, а чего будет если не "один", "два", "три" и т.д.
Я думаю не составит труда переделать таблицу Pas.dbf
Код: plaintext
1.
Replace Pas.num With "One" For alltr(Pas.num)=="Один"
*!* и т.д... ну и соответственно прогу чуть подправить, которая эти номера в поле Pas.num вставляет

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32942485
bobit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Grumax_userЯ посмотрел, а ты чего?
Чего, чего... А я не посмотрел, вот чего. Я, значи-ца, лопухнулся.
Прошу прощения у всей честной братии за отобранное время.
Указание от Igor Korolyov - это то, что доктор прописал. Хотя... Горбатого, как говорится, только...
А вот изменять или создавать таблицы - это не только то, что не надо бы, но и не получится. Все устройства хранения информации для записи результатов обработки недоступны. Секретятся, Богу в душу!.. С FPD это особенно интересно... Впрочем, всё - уже детали.
Спасибо большое Igor Korolyov.
...
Рейтинг: 0 / 0
Помогите организовать запрос
    #32942566
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Grumax_user!

Ну а ЧТО должно там получаться то? Сам же группируешь, сам потом удивляешься
полученному результату?
Вообще я например не понимаю по какой такой нереляционной (хотел сказать
нечеловеческой :) ) логике в изначальном примере ВАСЯ, ПЕТЯ и МАША попали в
ОДНУ строку, а скажем КУЗЬМА и ЖОРА в разные! Это если учитывать что в
реляционной СУБД порядок строк вообще не существенен!
Надо сначала формализовать требования тогда. о в любом случае это будет
подвидом перекрёстного запроса - да, согласен что т.к. есть "дублирование"
между Num и Pas, то vfpxtab в "чистом виде" не подойдёт - он рассчитывает
что комбинация полей ROW/COL уникальна (но тогда потребуется в одно поле
запихать сразу НЕСКОЛЬКО значений - например в 123/ОДИН должны попасть и
ВАСЯ и ЖОРА)... Т.е. надо либо как-то "расширить" поле Pas (например
банально - "склеить" его с полем VAR) - тогда vfpxtab отработает, но
естественно что в КАЖДОЙ строке тогда будет лишь по одному значению -
остальные NULL, либо как-то изменить логику vfpxtab (что весьма непросто
IMHO).
В первом случае "после" экзекуции можно будет провести "сбивку" - "сливая" 2
строки с одинаковым Pas, если они в прочих полях не пересекаются - так мы
существенно уменьшим число строк, но вполне может быть что "сольются" вовсе
не те строки что мы изначально предполагали - вообще скорее всего мы получим
вариант сбивки "лесенкой" - т.е. в первую запись последовательно "вольются"
записи с заполненным вторым, третьим, четвертым и т.д. полями - потом
процесс повториться для очередной записи с "единственным заполненным" полем
данных и так пока не дойдём до конца... Кратко говоря при такой схеме для
начального расклада КУЗЬМА и ЖОРА будут в одной строке, равно как и ЛЕНА,
ДАВИД, ЮРА и ИРА, ГРУША, ВАСЯ.
То это что требуется или нет - я уж судить не буду...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите организовать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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