powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Кросс
14 сообщений из 14, страница 1 из 1
Кросс
    #33477538
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как бы табличку через вью повернуть по полю?

т.е. есть несколько связанных табличек, я хотел бы их посчитать и повернуть значения (разнести) по показателям одного из полей

раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает

может есть у кого хорошее решение?
...
Рейтинг: 0 / 0
Кросс
    #33477674
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокс...раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает...
Странно... что-то не заметил пока странностей с новым стандартом...

А, что стандартное решение в VFPXTAB.PRG уже не подходит?
...
Рейтинг: 0 / 0
Кросс
    #33477843
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch фокс...раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает...
Странно... что-то не заметил пока странностей с новым стандартом...

А, что стандартное решение в VFPXTAB.PRG уже не подходит?

что за стандартное решение?
...
Рейтинг: 0 / 0
Кросс
    #33477891
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокс...что за стандартное решение?Еще со времен FPD2X имелась программа составляющая Cross-Tab. Какая программа обслуживает Cross-Tab можно посмотреть в системной переменной _Genxtab. Для:
FPD26 это Genxtab.prg
VFP это Vfpxtab.prg
Для демонстрации запусти мастер: File/New -> Query -> Wizard -> Cross-Tab Wizard.
...
Рейтинг: 0 / 0
Кросс
    #33479036
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возник дополнительный вопрос, а фокс не поддерживает как другие субд запросы типа

select a, b,select() as c,d
from l
order......

????

я имею ввиду запрос с подзапросом?

что-то в хелпе не нашел
...
Рейтинг: 0 / 0
Кросс
    #33479070
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, (к сожалению) подзапрос в качестве столбца не поддерживается, но в предикате FROM можно использовать и простые и корреляционные подзапросы.
С уважением, Алексей
...
Рейтинг: 0 / 0
Кросс
    #33483100
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi фокс!

> возник дополнительный вопрос, а фокс не поддерживает как другие субд
> запросы типа
> select a, b,select() as c,d
> я имею ввиду запрос с подзапросом?

Если ты имел в виду SELECT a, b, (SELECT с FROM j WHERE ...) AS c, ...
то такие запросы поддерживаются начиная с VFP9. Равно как и запросы с
подзапросами в списке таблиц FROM. Есть конечно и некоторые ограничения на
такого типа подзапросы. Судя по тому что у тебя в хелпе этого нет - ты
работаешь с VFP8 или более старой версией, а там это действительно
невозможно - там подзапросы только в WHERE были допустимы - с некоторыми
"групповыми" предикатами - типа IN, EXIST, op ANY, op ALL.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Кросс
    #33483256
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi фокс!

> возник дополнительный вопрос, а фокс не поддерживает как другие субд
> запросы типа
> select a, b,select() as c,d
> я имею ввиду запрос с подзапросом?

Если ты имел в виду SELECT a, b, (SELECT с FROM j WHERE ...) AS c, ...
то такие запросы поддерживаются начиная с VFP9. Равно как и запросы с
подзапросами в списке таблиц FROM. Есть конечно и некоторые ограничения на
такого типа подзапросы. Судя по тому что у тебя в хелпе этого нет - ты
работаешь с VFP8 или более старой версией, а там это действительно
невозможно - там подзапросы только в WHERE были допустимы - с некоторыми
"групповыми" предикатами - типа IN, EXIST, op ANY, op ALL.

Posted via ActualForum NNTP Server 1.3

да нет, посмотрел в. 9 сп1...


наверно плохо смотрю, но пока не нашел, счас еще покапаю хелп..
...
Рейтинг: 0 / 0
Кросс
    #33483551
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил проблемку так:

SELECT Ot1.id, Ot1.name, Ot1.nameotch, SUM(Otch3.ss) AS all,;
SUM(IIF(pr=1,ss,0.000)) AS r, SUM(IIF(pr=2,ss,0.000)) AS s,;
SUM(IIF(pr=3,ss,0.000)) AS u, SUM(IIF(pr=4,ss,0.000)) AS m,;
0.000 AS rr, 0 AS pr, 0.000 AS lab, 0.000 AS ob, 0.000 AS ut, 0.000 AS v;
FROM ;
reports!ot1 ;
LEFT OUTER JOIN reports!otch3 ;
ON Ot1.id = Otch3.code;
GROUP BY Ot1.id

только пришлось сначала выставить:
SET ENGINEBEHAVIOR 70

правда до конца так и не понял его назначения
SET ENGINEBEHAVIOR 90 ???
...
Рейтинг: 0 / 0
Кросс
    #33483651
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фоксправда до конца так и не понял его назначения
SET ENGINEBEHAVIOR 90 ???
Почитайте на сайте MS об этом... Данная установка, например, влияет на использование индексов с другой кодовой страницей в SQL запросах. Для себя я решил данную проблему просто - раз предыдущим версиям FoxPro все равно какя кодовая страница у таблицы и соответственно индексов - я перевел все таблицы в кодовую старницу, необходимую для проектов на VFP 9.0 (немного переделав стандартную программу cpzero.dbf для автоматической перекодировки всех файлов)...

Так что может кому и пригодится такая идея. При этом не забудьте в config.fpw and config.fp поставить новое значение кодовой таблицы...

Good luck!
...
Рейтинг: 0 / 0
Кросс
    #33483657
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фоксрешил проблемку так:

SELECT Ot1.id, Ot1.name, Ot1.nameotch, SUM(Otch3.ss) AS all,;
SUM(IIF(pr=1,ss,0.000)) AS r, SUM(IIF(pr=2,ss,0.000)) AS s,;
SUM(IIF(pr=3,ss,0.000)) AS u, SUM(IIF(pr=4,ss,0.000)) AS m,;
0.000 AS rr, 0 AS pr, 0.000 AS lab, 0.000 AS ob, 0.000 AS ut, 0.000 AS v;
FROM ;
reports!ot1 ;
LEFT OUTER JOIN reports!otch3 ;
ON Ot1.id = Otch3.code;
GROUP BY Ot1.id
Для совместимости с 9.0 Вам надо просто немного изменить Group by:
Код: plaintext
 GROUP BY  1 , 2 , 3 , 9 , 10 , 11 , 12 , 13 
Good luck!
...
Рейтинг: 0 / 0
Кросс
    #33483785
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch фоксрешил проблемку так:

SELECT Ot1.id, Ot1.name, Ot1.nameotch, SUM(Otch3.ss) AS all,;
SUM(IIF(pr=1,ss,0.000)) AS r, SUM(IIF(pr=2,ss,0.000)) AS s,;
SUM(IIF(pr=3,ss,0.000)) AS u, SUM(IIF(pr=4,ss,0.000)) AS m,;
0.000 AS rr, 0 AS pr, 0.000 AS lab, 0.000 AS ob, 0.000 AS ut, 0.000 AS v;
FROM ;
reports!ot1 ;
LEFT OUTER JOIN reports!otch3 ;
ON Ot1.id = Otch3.code;
GROUP BY Ot1.id
Для совместимости с 9.0 Вам надо просто немного изменить Group by:
Код: plaintext
 GROUP BY  1 , 2 , 3 , 9 , 10 , 11 , 12 , 13 
Good luck!

изменить можно, но тогда нужно менять и в трех предыдущих запросах...

а не хочется...

спасибо!!!
...
Рейтинг: 0 / 0
Кросс
    #33483811
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокс изменить можно, но тогда нужно менять и в трех предыдущих запросах...

а не хочется...
Вот и я Вам говорил про привычки
...
Рейтинг: 0 / 0
Кросс
    #33483960
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi фокс!

> да нет, посмотрел в. 9 сп1...

Плохо смотрел.
SELECT - SQL Command - SELECT Clause
всё там написано - в частности и про

Select_List_Item
....
- (Subquery)
Ну и конечно в разделе - есть и описание и пример.
SQL Language Improvements
Однако в ДАННОМ случае более оптимально оставить SUM(IIF()) - я совсем не
уверен, что оптимизатор справится с кучей подзапросов которые иначе пришлось
бы использовать - и весьма вероятно что вариант с подзапросами работал бы
заметно медленнее (если есть желание можешь сам смастерить тест).
Насчёт GROUP BY Сергей уже всё объяснил - начиная с VFP8 фокс будет ругаться
на такие "ущербные" запросы - ведь совершенно непонятно какие значения из
множества возможных следует использовать для тех полей которые не входят в
список группировочных и также не "вложены" в агрегирующую функцию - это тебе
может быть известно, что скажем Ot1.id это первичный ключ, и соответственно
все Ot1.name для одного значения id будут совпадать (и потому нет разницы
какое из одинаковых брать :) ) - фокс этого просчитать никак не может - так
что в таких случаях либо включай все подобные поля в GROUP BY, либо
"заворачивай" их в MIN() или MAX() - по сути это не изменит результат :)
Также при использовании LEFT JOIN крайне желательно использовать и NVL() для
полей идущих из "левой" таблицы (где могут быть NULL-ы) - дабы избежать
некоторых неприятностей...

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


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