Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как SQL-запрос "заставить" правильно считать? [D7, Paradox]


Страницы:   1 2

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]

Естественно, что считает неправильно. Достаточно представить, как выглядит результат соединения таблиц.
Если бы не Парадокс, то я бы сказал, как написать запрос...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо