Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c