Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Вложенные прямые запросы к DBF (http://forums.kuban.ru/f1040/vlozhennye_pryamye_zaprosy_k_dbf-3083634.html)

andertaletz 20.09.2012 09:34

Вложенные прямые запросы к DBF
 
Здравствуйте!
Есть запрос
ТекстЗапроса = "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 Номенклатура

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

Где грабли?

andertaletz 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-ные запросы упорядочивать в таком виде не умеет

andertaletz 20.09.2012 11:37

Работает прям не нарадуюсь

USSR 20.09.2012 11:53

надо 2 запроса которые в UNION обернуть простым запросом выборки полей и сортировать по этим полям типа такого
SELECT Рег.Номенклатура
|SUM (Рег.Сумма)
]FROM (тут твой запрос c UNION) Рег
|GROUP BY Рег.Номенклатура
|ORDER BY Рег.Номенклатура
Группировать можно и внутри каждого запроса

angro 20.09.2012 11:54

(2) и чё быстрее работает

Billi 20.09.2012 12:01

1-andertaletz >Просто замечание: при Collating Sequence=RUSSIAN индексы не работают, то есть, совсем не работают.
Используй Collating Sequence=Machine.

Про индексы почитай [url=http://www.1cpp.ru/forum/YaBB.pl?num=1184317705]тут[/url]


Текущее время: 09:54. Часовой пояс GMT +3.