Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

insert into <....> select <...> union select <...> = грабли   Найти похожие ветки 

 
petvv ©   (2007-02-12 13:53) [0]

Доброго времени суток!

Имеется следующий запрос

insert into temp.db
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)<>0
union
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*0)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0

при его инициализации ругается: Invalid use or keyword union
как с этой бедой бороться


 
ANB ©   (2007-02-12 14:00) [1]

так попробуй (без гарантии)

insert into temp.db
select * from (
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)<>0
union
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*0)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0
)


 
Правильный Вася   (2007-02-12 14:02) [2]

почитать localsql.hlp
?


 
Sergey13 ©   (2007-02-12 14:18) [3]

Вряд ли пройдет такое.
Да и зачем это сохранять?


 
petvv ©   (2007-02-12 14:55) [4]

А сохраняю потому, что только пока разбираюсь и не знаю, как к моей проблеме подобраться.
В общем есть два идентичных запроса (один из нмх выше), которые дёргают одинаковые данные из одних и тех же таблиц, но из разных периодов дат. Так вот надо каким то образом уместить их в одну таблицу, выходной запрос, чтобы далее их подсунуть в GroupHeader для сравнения. Т.е.

ГСМ                Данные за 1 период            Данные за 2 период     % разница
                    Данные за 1 период            Данные за 2 период     % разница


 
Sergey13 ©   (2007-02-12 15:04) [5]

> Так вот надо каким то образом уместить их в одну таблицу

Можно попробовать на клиенте слить запросы в один CDS или нечто вроде RxMemoryData.


 
Mike Kouzmine ©   (2007-02-12 15:07) [6]

Использовать вьюшки


 
Виталий Панасенко ©   (2007-02-12 15:12) [7]

Сделай вьюху и соедини вьюху и таблицу... Хотя, конечно, как период передать...Можно подзапросом попробовать
select fuel, sum(), (select sum(...) from table1 t2 where t1.id=t2.id and t2.ShiftTo between :Dat1 and :Dat2) Summa from table1 t1
where t1.ShiftTo between :Dat1 and :Dat2


 
Desdechado ©   (2007-02-12 15:25) [8]

А последовательно 2 insert сделать нельзя?


 
MsGuns ©   (2007-02-12 17:47) [9]

>ANB ©   (12.02.07 14:00) [1]

Paradox (Local SQL)  не поодерживает вложенные запросы

>Mike Kouzmine ©   (12.02.07 15:07) [6]
>Использовать вьюшки

В парадоксе ?

По сабжу:
ИМХО, вообще не ясно зачем выборка ВСЕХ записей разбивается на два запроса (=0 и не=0), а потом объединяется


 
Виталий Панасенко ©   (2007-02-12 18:10) [10]


> MsGuns ©   (12.02.07 17:47) [9]

Да, там есть такая возможность. Смотри LocalSQL.HLP. Создаешь файло с запросом(например, select id, sum(summa) as summa from table group by id),
записываешь в файл с расширением SQL, бросаешь в папку БД - и вуаля!
select * from "SQl.SQL" where id=1


 
petvv ©   (2007-02-13 07:04) [11]


> ИМХО, вообще не ясно зачем выборка ВСЕХ записей разбивается
> на два запроса (=0 и не=0), а потом объединяется

А дёргается и объединяется потому, что есть клиенты, которые заправляются за наличку, т.е. TotOsnov.Cur<>0 и есть клиенты, которые заправляются по безналу, т.е. TotOsnov.Cur=0


 
petvv ©   (2007-02-13 07:10) [12]


> А последовательно 2 insert сделать нельзя?

Я в эту сторону уже думал и тоже склоняюсь к такому выводу, примерно так:
insert into temp.db
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)<>0
Следующий запрос:
insert into temp.db
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*0)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0

и далее таким же макаром

Update into temp.db (set .....) where (....)
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)<>0
и
Update into temp.db (set .....) where (....)
select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:QDBeg and TotOsnov.ShiftTo<=:QDEnd
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0


 
petvv ©   (2007-02-13 07:19) [13]

Гиморой конешно с дельфями, а в фоксе можно было разрулить на много проще. Но ни куда ни денешся.


 
MsGuns ©   (2007-02-13 08:16) [14]

>petvv ©   (13.02.07 07:19) [13]
>Гиморой конешно с дельфями, а в фоксе можно было разрулить на много проще. Но ни куда ни денешся.

Так что же мешает сделать "как в фоксе" - тупо вытянуть все три таблицы на "клиента" и босиком и с монтировкой while not eof со вставкой записей в рез.таблицу ?


 
Sergey13 ©   (2007-02-13 08:17) [15]

> [13] petvv ©   (13.02.07 07:19)

Это не с делфями геморой, а с проектированием приложения и БД.


 
petvv ©   (2007-02-13 08:34) [16]

Может быть ты и прав, но куда денешся от софтины кототрая написана на дельфях и под Paradox



Страницы: 1 вся ветка

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
2-1175844369
Xmen
2007-04-06 11:26
2007.04.29
как исползовать in


3-1171277582
petvv
2007-02-12 13:53
2007.04.29
insert into <....> select <...> union select <...> = грабли


15-1175359491
ArtemESC
2007-03-31 20:44
2007.04.29
С наступающим днем Космонавтики!!!


6-1162525572
tarantul_ip02
2006-11-03 06:46
2007.04.29
Сделал бота для сетей irc. Есть проблема.


8-1155284391
linky
2006-08-11 12:19
2007.04.29
Звук из сервиса.