|
|
|
Кросс
|
|||
|---|---|---|---|
|
#18+
как бы табличку через вью повернуть по полю? т.е. есть несколько связанных табличек, я хотел бы их посчитать и повернуть значения (разнести) по показателям одного из полей раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает может есть у кого хорошее решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 19:47 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
фокс...раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает... Странно... что-то не заметил пока странностей с новым стандартом... А, что стандартное решение в VFPXTAB.PRG уже не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 22:21 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
Sergey Ch фокс...раньше я делал это через ф-ю ииф, теперь новый стандарт скл, не все срабатывает... Странно... что-то не заметил пока странностей с новым стандартом... А, что стандартное решение в VFPXTAB.PRG уже не подходит? что за стандартное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 07:37 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
фокс...что за стандартное решение?Еще со времен FPD2X имелась программа составляющая Cross-Tab. Какая программа обслуживает Cross-Tab можно посмотреть в системной переменной _Genxtab. Для: FPD26 это Genxtab.prg VFP это Vfpxtab.prg Для демонстрации запусти мастер: File/New -> Query -> Wizard -> Cross-Tab Wizard. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 08:50 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
возник дополнительный вопрос, а фокс не поддерживает как другие субд запросы типа select a, b,select() as c,d from l order...... ???? я имею ввиду запрос с подзапросом? что-то в хелпе не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 14:04 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
Нет, (к сожалению) подзапрос в качестве столбца не поддерживается, но в предикате FROM можно использовать и простые и корреляционные подзапросы. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 14:16 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 21:46 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
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... наверно плохо смотрю, но пока не нашел, счас еще покапаю хелп.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 07:44 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
решил проблемку так: 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 ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 15:31 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
фоксправда до конца так и не понял его назначения SET ENGINEBEHAVIOR 90 ??? Почитайте на сайте MS об этом... Данная установка, например, влияет на использование индексов с другой кодовой страницей в SQL запросах. Для себя я решил данную проблему просто - раз предыдущим версиям FoxPro все равно какя кодовая страница у таблицы и соответственно индексов - я перевел все таблицы в кодовую старницу, необходимую для проектов на VFP 9.0 (немного переделав стандартную программу cpzero.dbf для автоматической перекодировки всех файлов)... Так что может кому и пригодится такая идея. При этом не забудьте в config.fpw and config.fp поставить новое значение кодовой таблицы... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 17:11 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
фоксрешил проблемку так: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 17:14 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
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 изменить можно, но тогда нужно менять и в трех предыдущих запросах... а не хочется... спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 20:48 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
фокс изменить можно, но тогда нужно менять и в трех предыдущих запросах... а не хочется... Вот и я Вам говорил про привычки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 21:25 |
|
||
|
Кросс
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2006, 03:31 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33477674&tid=1592612]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 396ms |

| 0 / 0 |
