12.08.2004, 08:35 | #1 |
Участник
|
Как переобразовать из SQL в X++?
Можно ли как-нибудь преобразовать следующие запросы из SQL в X++?
1) select SalesId from SalesLine where cast(ConfirmedDlv as int) - cast(createdDate as int) >= 1 2) select SalesId from SalesLine where convert(varchar(10),createdDate,103) = '25/07/2004' 3) select cast(count(RecId) as real)/7 as 'www' from SalesLine group by SalesId 4) select cast(ConfirmedDlv as int) - cast(createdDate as int) as 'www' from SalesLine |
|
12.08.2004, 09:37 | #2 |
Модератор
|
PHP код:
Георгий |
|
12.08.2004, 09:39 | #3 |
Участник
|
1) В AXAPTA даты записываются в формате DATE, т.е. без времени. Только дата. Как следствие, прямое вычитание из одной даты другую даст количество дней между датами.
Конвертация в MS SQL DateTime в тип Integer приводит к отображению количества дней прошедших с 01.01.1900 до конвертируемой даты. Следовательно, в AXAPTA вполне коректен запрос select SalesId from SalesLine where ConfirmedDlv - createdDate >= 1 2) Константы типа Date в AXAPTA записываются через обратный слэш без кавычек select SalesId from SalesLine where createdDate = 25\07\2004 3) В AXAPTA недопустимо в качестве аргумента функции аггрегации указывать что-либо, кроме имени поля. Т.е. придется поступить так: select count(RecId) from SalesLine group by SalesId www = salesLine.RecId/7 4) В AXAPTA недопустимо в качестве списка полей указывать что-либо кроме имен полей. Т.е. придется поступить так: select ConfirmedDlv, createdDate from SalesLine www = salesLine.ConfirmedDlv - salesLine.createdDate |
|
12.08.2004, 10:56 | #4 |
Участник
|
На самом деле конечно же я упростил те запросы, которые написал.
По первому запросу: Цитата:
Изначально опубликовано pdojn
1) select SalesId from SalesLine where cast(ConfirmedDlv as int) - cast(createdDate as int) >= 1 Цитата:
Изначально опубликовано George Nordic
//1) while select SalesId,ConfirmedDlv,createdDate from SalesLine where SalesLine.ConfirmedDlv > SalesLine.createdDate { info(strfmt("%1",SalesLine.SalesId)); } Цитата:
Изначально опубликовано Владимир Максимов
Следовательно, в AXAPTA вполне коректен запрос select SalesId from SalesLine where ConfirmedDlv - createdDate >= 1 Невозможно выбрать запись в 'Строки заказа' ('SalesLine') Заказ: , .База данных SQL обнаружила ошибку. Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '='. Оператор SQL: SELECT A.SALESID,A.RECID FROM SALESLINE A WHERE ((DATAAREAID=?) AND ((CONFIRMEDDLV-CREATEDDATE)>=1=?)) OPTION(FAST 9) что и понятно ... в Аксапте не реализованы простейшие действия с Date. По второму запросу: ... да ... просто) По третьему и четвертому запросу: хотелось узнать, можно ли объявить поле, не входящее в список полей указанной таблицы... Но видимо нельзя, что печально(( |
|
12.08.2004, 11:30 | #5 |
Модератор
|
Не стоит печалиться: Oracle делает, в принципе, то же самое - перебирает все строки и делает над ними арифметические операции...
Хороший совет - выполняйте данные вычисления на сервере (пишите методы на таблицах или в server-классах). Если будете перетягивать всю таблицу на клиента для вычислений... Ой-ё.. А на серваке - должно жить. И резво. Удачи! Георгий. |
|
12.08.2004, 11:34 | #6 |
Участник
|
Спасибо!
С уважением, Павел. |
|
|
|