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

Вниз

SQL запрос !   Найти похожие ветки 

 
petvv ©   (2007-07-09 07:49) [0]

Такая задача D2007+BDE+Paradox:
Необходимо из таблицы выбрать данные за два периода по одним и тем же полям, чтобы сделать сравнительный анализ, делаю так:

select Fuel.Marka, Osnovan.Name, SUM(TotOsnov.Lit) Litr,
SUM(TotOsnov.Cur) Summa,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta,
"" Marka1, "" Name1, "" Litr1, "" Summa1, "" Delta1
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:DtB and TotOsnov.ShiftTo<=:DtE
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,
"" Marka1, "" Name1, "" Litr1, "" Summa1, "" Delta1
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:DtB and TotOsnov.ShiftTo<=:DtE
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0
union
select "" Marka, "" Name, "" Litr, "" Summa, "" Delta,
Fuel.Marka Marka1, Osnovan.Name Name1, SUM(TotOsnov.Lit) Litr1,
SUM(TotOsnov.Cur) Summa1,
((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta1
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:DtB1 and TotOsnov.ShiftTo<=:DtE1
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)<>0
union
select "" Marka, "" Name, "" Litr, "" Summa, "" Delta,
Fuel.Marka Marka1, Osnovan.Name Name1, SUM(TotOsnov.Lit) Litr1,
SUM(TotOsnov.Cur) Summa1,
((SUM(TotOsnov.Lit)*0)-SUM(TotOsnov.Cur)) Delta1
from Fuel, TotOsnov, Osnovan
where
TotOsnov.ShiftTo>=:DtB1 and TotOsnov.ShiftTo<=:DtE1
and
TotOsnov.Product=Fuel.Num
and
TotOsnov.Osnovanye=Osnovan.Num
group by Marka, Name
having SUM(TotOsnov.Cur)=0

но ругается на несовпадение типов, ну это и логично.
Теперь вопрос. Как задать тип поля "" Marka1 as ... и т.д. для Paradox.
Тока сильно не пинайте.


 
ЮЮ ©   (2007-07-09 10:07) [1]

Привести поля к одному типу/размерности во всех частях объединенного запроса, используя CAST.

А ещё можно, не дублировать поля, а ввести доп.поле для идентификации выборки:

select
 1 SelBumber, 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
...
select
 3, Fuel.Marka Marka1, Osnovan.Name Name1, SUM(TotOsnov.Lit) Litr1,
 SUM(TotOsnov.Cur) Summa1,
 ((SUM(TotOsnov.Lit)*Fuel.Price)-SUM(TotOsnov.Cur)) Delta1
from Fuel, TotOsnov, Osnovan
...


тогда типы полей будут одинаковы.
P.S. Алиасы полей в последующих запросах не обязательны, имена полей пормируются по алиасам в превом запросе


 
evvcom ©   (2007-07-09 11:22) [2]

Чтобы определить, в каких частях идет несоответствие типов, отключи все кроме 2-х и компильни, в случае удачи последовательно подключай по 1-ой части (union).

Кстати, ты уверен, что тебе нужен union, а не union all?


 
ЮЮ ©   (2007-07-09 11:36) [3]

> Чтобы определить, в каких частях идет несоответствие типов,
> отключи все кроме 2-х и компильни


Да он и так знает.
 SELECT "" Litr
 UNIOM
 SUM(TotOsnov.Lit) Litr

в одном случае строка, в другом, очевидно, чиcло.
Вместо "" можнj было бы использовать MULL, но только не в первом подзапросе.
Остается 0. Или отказ от полей=дубликатов  (см. [1] ЮЮ)


 
evvcom ©   (2007-07-09 12:06) [4]


> Да он и так знает.
>  SELECT "" Litr
>  UNIOM
>  SUM(TotOsnov.Lit) Litr

Ну здесь видно, а кашу из [0] мне лениво было разбирать.



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
2-1184052074
AZIZE
2007-07-10 11:21
2007.08.05
несовместимость типов


6-1166809548
XfroSt
2006-12-22 20:45
2007.08.05
IndyUDPServer и несколько интерфейсов


2-1183643293
vir
2007-07-05 17:48
2007.08.05
форма поверх


15-1184235201
ArtemESC
2007-07-12 14:13
2007.08.05
Новые веяния в играх...


1-1180067482
Valkyre
2007-05-25 08:31
2007.08.05
Динамическое отображения TSpeedButton