Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1176025824
vitv
2007-04-08 13:50
2007.04.29
DBGrid+DrawText


2-1175976749
Officeman
2007-04-08 00:12
2007.04.29
Работа со строками (как удалить из строки рус.буквы)


2-1176197360
npu3pak
2007-04-10 13:29
2007.04.29
Как райионально добавлять данные в базу Access?


1-1172822802
Jan
2007-03-02 11:06
2007.04.29
array of array Integer


15-1175599967
nali
2007-04-03 15:32
2007.04.29
Делфи не видит dcu файлы сторонних компонент.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский