Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите плз как это будет в Interbase SQL [D7, IB6.x]


HMT ©   (2004-08-17 10:26:00) 

Это текст процедуры MS-SQL, уже три дня пытаюсь перести его в interbase. Смысл скрипта - суммирование прихода, вычитание расхода для получения остатков. Помогите плз, если кто синтаксис знает.

DELETE FROM Results

INSERT INTO Results SELECT DISTINCT(ProductName), SUM(Quantity) as Quantity from Inbound GROUP BY ProductName

DECLARE @ProductName varchar(500)
DECLARE @Discount int
DECLARE CT CURSOR FOR SELECT DISTINCT(ProductName), SUM(Discount) as Discount from Outbound GROUP BY ProductName

OPEN CT
WHILE 1=1 BEGIN
 FETCH FROM CT INTO @ProductName, @Discount

 IF @@fetch_status=-1
     BREAK
 IF @@fetch_status=-2
     CONTINUE

 UPDATE Results SET Quantity=Quantity-@Discount WHERE ProductName=@ProductName
END

DEALLOCATE CT
SELECT * FROM Inbound
SELECT * FROM Outbound
SELECT * FROM Results


Sandman25   (2004-08-17 11:03:00) [1]

Или даже

select productname, sum(discount)
from
(
select productname, discount
from inbound
union all
select productname, -discount
from outbound
) a
group by productname


Sandman25   (2004-08-17 11:01:00) [2]

Кстати, на MSSQL вместо ХП надо было написать:
select productname, sum(discount)
from
(
select productname, sum(discount) discount
 from inbound
 group by productname
union all
select productname, -sum(discount) discount
 from outbound
 group by productname
) a
group by productname


Соловьев   (2004-08-17 10:42:00) [3]


> Чем можно заменить fetch_status?

нету такого


HMT   (2004-08-17 10:42:00) [4]

Да, тут.

thankz..щас попробую


Соловьев   (2004-08-17 10:41:00) [5]


> DECLARE CT CURSOR FOR SELECT DISTINCT(ProductName), SUM(Discount)
> as Discount from Outbound GROUP BY ProductName
>
> OPEN CT
> WHILE 1=1 BEGIN
>  FETCH FROM CT INTO @ProductName, @Discount
>
>  IF @@fetch_status=-1
>      BREAK
>  IF @@fetch_status=-2
>      CONTINUE
>
>  UPDATE Results SET Quantity=Quantity-@Discount WHERE ProductName=@ProductName
> END

насколь я понял тут основной трабл?
for
SELECT DISTINCT(ProductName), SUM(Discount) as Discount from Outbound GROUP BY ProductName
into :ProductName, :Discount
do begin
 UPDATE Results SET Quantity=Quantity-:Discount WHERE ProductName=:ProductName;
end;


HMT   (2004-08-17 10:38:00) [6]

Может курсор здесь лишний ?

Чем можно заменить fetch_status?


Наверх

Титульная страница Поиск, карта сайта Написать письмо