К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Вложенные прямые запросы к DBF

Гость
0 - 20.09.2012 - 09:34
Здравствуйте!
Есть запрос
ТекстЗапроса = "SELECT
| КоличествоВ as КоличествоВ,
| Количество as Количество,
| Номенклатура as Номенклатура
|FROM
|(SELECT
| РегПродажа.SP2227 as КоличествоВ,
| РегПродажа.SP2224 as Количество,
| СпрНомен.DESCR as Номенклатура
|FROM
| _RA2228Old РегПродажа
|Left Join _SC156Old СпрНомен ON РегПродажа.SP2218 = СпрНомен.ID
|
|UNION ALL
|
|SELECT
| SUM(РегПродажа01.SP2227) as КоличествоВ,
| SUM(РегПродажа01.SP2224) as Количество,
| СпрНомен01.DESCR as Номенклатура
|FROM
| _RA2228Old РегПродажа01
|Left Join _SC156Old СпрНомен01 ON РегПродажа01.SP2218 = СпрНомен01.ID) Итоги
|
|ORDER by Номенклатура";

Выдает
State 42000, native 200, message [Microsoft][ODBC Visual FoxPro Driver]Syntax error.

По отдельности запросы работают отлично.
Проблема вышла из за того, что запрос

"SELECT
| РегПродажа.SP2227 as КоличествоВ,
| РегПродажа.SP2224 as Количество,
| СпрНомен.DESCR as Номенклатура
|FROM
| _RA2228Old РегПродажа
|Left Join _SC156Old СпрНомен ON РегПродажа.SP2218 = СпрНомен.ID
|
|UNION ALL
|
|SELECT
| SUM(РегПродажа01.SP2227) as КоличествоВ,
| SUM(РегПродажа01.SP2224) as Количество,
| СпрНомен01.DESCR as Номенклатура
|FROM
| _RA2228Old РегПродажа01
|Left Join _SC156Old СпрНомен01 ON РегПродажа01.SP2218 = СпрНомен01.ID
|
|ORDER by Номенклатура

Не упроядочивается по полю Номенклатура, хотя каждый из запросов, отрабатывает хорошо.

Где грабли?



Гость
1 - 20.09.2012 - 11:30
База =СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;
|Data Source=" + КаталогИБ() +";
|Mode=Read;
|Extended Properties="";
|User ID="";
|Password="";
|Mask Password=False;
|Collating Sequence=RUSSIAN;
|DSN=""";
Рез = База.Соединение(Соединение);
RS = База.СоздатьКоманду();

ТекстЗапроса = "SELECT
| РегПродажа.SP2227 as КоличествоВ,
| РегПродажа.SP2224 as Количество,
| СпрНомен.DESCR as Номенклатура
|FROM
| _RA2228Old as РегПродажа
|Left Join _SC156Old as СпрНомен ON РегПродажа.SP2218 = СпрНомен.ID
|
|UNION ALL
|
|SELECT
| SUM(РегПродажа01.SP2227) as КоличествоВ,
| SUM(РегПродажа01.SP2224) as Количество,
| СпрНомен01.DESCR as Номенклатура
|FROM
| _RA2228Old as РегПродажа01
|Left Join _SC156Old as СпрНомен01 ON РегПродажа01.SP2218 = СпрНомен01.ID
|GROUP by Номенклатура
|ORDER by Номенклатура,Количество DESC,КоличествоВ DESC";

До этого работал с драйвером Фокса

База =СоздатьОбъект("ODBCDataBase");
Соединение = "DRIVER=Microsoft Visual FoxPro Driver;
|Deleted=Yes;
|Null=Yes;
|Collate=RUSSIAN;
|Exclusive=No;
|Collating Sequence=RUSSIAN;
|SourceType=DBF;
|SourceDB="+КаталогИБ();
Рез = База.Соединение(Соединение);
RS = СоздатьОбъект("ODBCRecordset");
RS.УстБД(База);

Он UNION ALL-ные запросы упорядочивать в таком виде не умеет
Гость
2 - 20.09.2012 - 11:37
Работает прям не нарадуюсь
Гость
3 - 20.09.2012 - 11:53
надо 2 запроса которые в UNION обернуть простым запросом выборки полей и сортировать по этим полям типа такого
SELECT Рег.Номенклатура
|SUM (Рег.Сумма)
]FROM (тут твой запрос c UNION) Рег
|GROUP BY Рег.Номенклатура
|ORDER BY Рег.Номенклатура
Группировать можно и внутри каждого запроса
Гость
4 - 20.09.2012 - 11:54
(2) и чё быстрее работает
5 - 20.09.2012 - 12:01
1-andertaletz >Просто замечание: при Collating Sequence=RUSSIAN индексы не работают, то есть, совсем не работают.
Используй Collating Sequence=Machine.

Про индексы почитай тут


К списку вопросов






Copyright ©, Все права защищены