Прямой SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Алексей писал(а): возвращает пусто

Код: Выделить всё

sql select saldmoun.sums, saldmoun.datesal from saldmoun where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=convert(datetime,'01/03/2014',104);
как конвертировать дату для запросов?

Код: Выделить всё

sql select saldmoun.sums, saldmoun.datesal from saldmoun where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(1,3,2014);
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Прямой SQL

Сообщение Алексей »

Да, спасибо, #date(01,03,2014) помогло.

Подскажите ещё одно, как сгруппировать не по коду объекта а по первым трём символам кода? Не получается почему то, как бы непробовал.

Код: Выделить всё

sql select sum(saldmoun.sums), katstroy.code  from saldmoun left join katstroy on kauos[3]=katstroy.nrec where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(01,03,2014)
group by katstroy.code;
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Алексей писал(а):Да, спасибо, #date(01,03,2014) помогло.

Подскажите ещё одно, как сгруппировать не по коду объекта а по первым трём символам кода? Не получается почему то, как бы непробовал.

Код: Выделить всё

sql select sum(saldmoun.sums), katstroy.code  from saldmoun left join katstroy on kauos[3]=katstroy.nrec where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(01,03,2014)
group by katstroy.code;

substring
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Прямой SQL

Сообщение Алексей »

а почему отрабатывает

Код: Выделить всё

sql select sum(saldmoun.sums),  substring(katstroy.code,1,3 )  from saldmoun left join katstroy on kauos[3]=katstroy.nrec where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(01,03,2014)
group by substring(katstroy.code,1,3);
а как только я именую поле (чтобы груп бай был меньше), запрос перестает работать

Код: Выделить всё

sql select sum(saldmoun.sums),  substring(katstroy.code,1,3 ) as stroyka  from saldmoun left join katstroy on kauos[3]=katstroy.nrec where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(01,03,2014);
почему?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Код: Выделить всё

sql select sum(saldmoun.sums),  substring(katstroy.code,1,3 ) as stroyka  from saldmoun left join katstroy on kauos[3]=katstroy.nrec where
    '408'    = saldmoun.scheto
and '3'      = saldmoun.subossch
and datesal=#date(01,03,2014)
group by substring(katstroy.code,1,3);
И так не работает ?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Прямой SQL

Сообщение Алексей »

так работает, но смысл в именовании поля, чтобы потом это короткое имя использовать в group by ...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Алексей писал(а):так работает, но смысл в именовании поля, чтобы потом это короткое имя использовать в group by ...
Могу ошибаться, но, помоему, псевдоним столбца, определенный в списке SELECT, нельзя использовать при указании столбца группирования.
По каким соображением Вам важно использовать его именно в group by ?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прямой SQL

Сообщение edward_K »

Вообще то SQL требует все не константные поля и без функций агрегирования в select использовать в group by - исходя из этого и думайте.
win
Новичок
Сообщения: 26
Зарегистрирован: 24 ноя 2010, 13:10

Re: Прямой SQL

Сообщение win »

BITAND возвращает NULL. Подскажите в чем проблема?
sql SELECT x$users.xu$flag, bitand(x$users.xu$flag,8) FROM x$users;
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

вроде работает...у меня Ваш запрос выдал :

┌─────────┬─────────────────────────────┐
│ XU$FLAG │ BITAND(X$USERS."XU$FLAG",8) │
├─────────┼─────────────────────────────┤
│ 1028 │ 0.0000000000000000000000 │
│ 1028 │ 0.0000000000000000000000 │
│ 12 │ 8.0000000000000020000000 │


может не на 9,1 галактике Вы пробуете ?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прямой SQL

Сообщение edward_K »

Проверьте версию атлантиса в сапорте - на старых могут быть глюки. для 810 это 5.4.43 или 5.4.44. В vipprogr.chm иногда пишут начиная с какого атлантиса функция актуальна.
win
Новичок
Сообщения: 26
Зарегистрирован: 24 ноя 2010, 13:10

Re: Прямой SQL

Сообщение win »

edward_K писал(а):Проверьте версию атлантиса в сапорте - на старых могут быть глюки. для 810 это 5.4.43 или 5.4.44. В vipprogr.chm иногда пишут начиная с какого атлантиса функция актуальна.
Функции BITAND, BITNOT, BITOR и BITXOR доступны начиная с Атлантиса 5.5.12. У нас 5.4.44 :mad: Все ясно, спасибо!
win
Новичок
Сообщения: 26
Зарегистрирован: 24 ноя 2010, 13:10

Re: Прямой SQL

Сообщение win »

Подскажите как запустить функцию или хранимую процедуру написанную на PlSQL, например, "DT_Month" через vip ? (Гал 810)
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

win писал(а):Подскажите как запустить функцию или хранимую процедуру написанную на PlSQL, например, "DT_Month" через vip ? (Гал 810)
Из ВИП доступен вызов зарегестрированных процедур и функций .Аля :

Код: Выделить всё

SQL Function GetDocPer ( 
								curparty   : comp;
								nrecops    : comp;
								st_v       : comp;
								dper       : date
  					    ): comp ;
var
 res  : comp;
{

  res:=(
         SELECT top 1 k.nrec 
			FROM Spsopr sp inner join Katsopr k on sp.csopr=k.nrec 
				and sp.cparty=curparty 
				and sp.vidsopr=630 
				and sp.dsopr<=dper 
				and sp.prmc=1
				and k.cpodrfrom=nrecops
				and k.cnote=st_v
       );

  if (res= #comp(0) ) 
  {

   res:=(
          SELECT top 1 k.nrec 
 			FROM Spsopr sp inner join Katsopr k on sp.csopr=k.nrec 
				and sp.cparty=curparty 
 				and sp.vidsopr=630
				and sp.dsopr<=dper 
				and sp.prmc=1
				and k.cnote=st_v
       );

  }

 Return res;
}

после компиляции такой функции она появится на вкладке в саппорте в правах доступа на закладке "права на хранимые процедуры"
Также есть немало функций по работе с датой и временем, описанными в vipprog.chm в разделе "прямой sql" - их ,в принципе достаточно
Кроме этого никто не запрещает воспользоваться опытом Морзе

http://tyumbit.ru/gal_forum/viewtopic.php?f=8&t=10938

и написать что то свое на первозданном диалекте PL/SQL (ну или T-SQL)...кстати нечто подобное есть в
.\exe\ManufExt\SQL\Oracle\Func\
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Прямой SQL

Сообщение Руслан »

Пробую делать апдейт таблицы spstep и basedoc в печатной форме основания на продажу. Причем basedoc апдейтит, а на spstep Апдейт не проходит. В саппорте апдейты проходят нормально:

Код: Выделить всё

.begin
update Basedoc where (basedoc.Nrec = BaseDocNrec ) set basedoc.total:= rr_sumv, basedoc.nds := r_ndsv;
update Spstep where (Spstep.CSTEPDOC = comp(‘281474977156119’)) set Spstep.price:= rr_sumv;
end.
Ответить