![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как SQL-запрос "заставить" правильно считать? [D7, Paradox]
Gunek © (2006-11-05 19:00:00)Здравствуйте, Уважаемые Мастера Delphi!
Проблема в правильном выводе результата запроса SQL: нужно из четырёх таблиц вывести одну. Таблицы такие:
1 avto.DB<Avto.Inv, Avto."Date", Avto.Cost, Avto.Marka>,
2 AZS.DB<Azs.Nvp, Azs.Inv, Azs.Fuel, Azs.Vl>,
3 Fprice.DB<Fprice.Fuel, Fprice.Price>,
4 remont.DB<Remont.Inv, Remont.Crack, Remont.Cost>
нужно сформировать:
<avto.inv,avto.marka,cost> , где cost - общие затраты на авто с инвентарным ном. avto.inv, которое получается путём суммирования затрат на топливо(sum(azs.vl*fprice.price)) , ремонт(remont.cost) и покупку(avto.cost).
Вот код моего запроса:
SELECT Avto.Inv, Avto.Marka, sum(azs.vl*fprice.price)+SUM(REMONT.COST)+AVTO.COST
FROM "avto.DB" Avto, "AZS.DB" Azs, "Fprice.DB" Fprice, "remont.DB" Remont
where avto.inv=azs.inv and avto.inv=remont.inv and azs.fuel=fprice.fuel
group by avto.inv, avto.marka
Но подсчитывает неправильно, проверил вручную, можно что-то исправить или добавить, как вы думаете?
Gunek (2006-11-05 23:01:00) [21]>Это поле в таблице avto
Да, согласен, но после выполнения запроса таблица примет другой вид, в поле COST которой и должна быть общая сумма
Johnmen (2006-11-05 22:49:00) [22]
> >И где здесь "поле COST"?
> avto.cost
Это поле в таблице avto
Gunek (2006-11-05 22:34:00) [23]>Это запрос, а не таблица.
но визуально мы получаем таблицу
>И где здесь "поле COST"?
avto.cost
Johnmen (2006-11-05 22:25:00) [24]Это запрос, а не таблица.
И где здесь "поле COST"?
Gunek (2006-11-05 22:22:00) [25]>Что за таблица?
SELECT
Avto.Inv,
Avto.Marka,
AVTO.COST +
(SELECT sum(azs.vl*fprice.price) FROM azs, fprice
WHERE avto.inv=azs.inv and azs.fuel=fprice.fuel) +
(SELECT SUM(REMONT.COST) FROM remont WHERE avto.inv=remont.inv)
FROM avto
Johnmen (2006-11-05 22:15:00) [26]
> в поле COST вообще пустые ячейки - Это в результирующей
> таблице
Что за таблица?
Gunek (2006-11-05 22:01:00) [27]в поле COST вообще пустые ячейки - Это в результирующей таблице
значения в таблицах не null - в таблицах, из которых берутся данные
Johnmen (2006-11-05 21:52:00) [28]
> Так в поле COST вообще пустые ячейки.
и
> значения в таблицах не null
Что-то здесь не так. Что?
Gunek (2006-11-05 21:47:00) [29]>Зачем тогда их учитывать при суммировании?
Ну чтобы посчитать общие затраты, значения в таблицах не null
Johnmen (2006-11-05 21:12:00) [30]Зачем тогда их учитывать при суммировании?
ЗЫ
В Парадоксе нет ф-ии преобразования null к 0. И нет условной ф-ии типа IIF.
Gunek (2006-11-05 20:34:00) [31]Так в поле COST вообще пустые ячейки.
Johnmen (2006-11-05 20:13:00) [32]А впрочем и на Парадоксе это будет работать:
SELECT
Avto.Inv,
Avto.Marka,
AVTO.COST +
(SELECT sum(azs.vl*fprice.price) FROM azs, fprice
WHERE avto.inv=azs.inv and azs.fuel=fprice.fuel) +
(SELECT SUM(REMONT.COST) FROM remont WHERE avto.inv=remont.inv)
FROM avto
Gunek (2006-11-05 19:59:00) [33]Коротко поясню: для конкретного авто(avto.inv) нужно найти общие расходы: стоимость при покупке(avto.cost)+затраты на топливо(azs.vl*fprice.price)+затраты на ремонт(remont.cost)
Johnmen (2006-11-05 19:16:00) [34]Естественно, что считает неправильно. Достаточно представить, как выглядит результат соединения таблиц.
Если бы не Парадокс, то я бы сказал, как написать запрос...