![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите правильно составить запрос.... FB 1.5 [D6]
Koala © (2005-08-09 19:35:00)Есть справочник тарифов
CREATE TABLE TBL_REF_TARIFF_GENERAL (
ID_TARIFF_GENERAL DM_INT NOT NULL /* DM_INT = INTEGER */,
ID_CAR_TARIFF DM_INT /* DM_INT = INTEGER */,
DATE_TARIFF DM_DATE /* DM_DATE = DATE */,
VALUE_TARIFF DM_FLOAT_TWO /* DM_FLOAT_TWO = NUMERIC(5,2) */,
DATE_EDIT DM_DATETIME /* DM_DATETIME = TIMESTAMP */,
USER_EDIT DM_USERS /* DM_USERS = VARCHAR(32) */
);
тарифы заплдняются раз в квартал
и есть процедура выбора данных за период (месяц)
CREATE PROCEDURE PR_PRINT_COUPONCUSTOMER (
IN_ENTER DATE,
IN_END DATE,
IN_FIRMS VARCHAR(200))
RETURNS (
OUT_ID_TRAVEL INTEGER,
OUT_NUM_TRAVELSHEET NUMERIC(18,0),
OUT_DATE_TRAVEL DATE,
OUT_ID_AVTO INTEGER,
OUT_GOS_NUM VARCHAR(15),
OUT_MARKA_AVTO VARCHAR(30),
OUT_SHORT_NAME_FIRM VARCHAR(50),
OUT_SIGNATURE_CLIENT VARCHAR(100),
OUT_NAME_CLIENT VARCHAR(100),
OUT_TIME_ENT TIMESTAMP,
OUT_TIME_END TIMESTAMP,
OUT_TIME_USAGE VARCHAR(8),
OUT_MINUTES INTEGER,
OUT_SPEEDOMETER_ENT INTEGER,
OUT_SPEEDOMETER_END INTEGER,
OUT_SPEEDOMETER_RESULT INTEGER,
OUT_BUSINESS_TRIP INTEGER)
AS
BEGIN
FOR
SELECT DISTINCT TBL_JOURNAL_TRAVEL.ID_TRAVEL,
TBL_JOURNAL_TRAVEL.NUM_TRAVELSHEET,
TBL_JOURNAL_TRAVEL.DATE_TRAVEL,
TBL_REF_CAR.ID_AVTO,
TBL_REF_CAR.GOS_NUM,
TBL_REF_CAR.MARKA_AVTO,
TBL_REF_FIRMS.SHORT_NAME_FIRM,
TBL_REF_CLIENT.SIGNATURE_CLIENT,
TBL_REF_CLIENT.NAME_CLIENT,
TBL_CARD_CUSTOMER.TIME_ENT,
TBL_CARD_CUSTOMER.TIME_END,
TBL_CARD_CUSTOMER.TIME_USAGE,
TBL_CARD_CUSTOMER.MINUTES,
TBL_CARD_CUSTOMER.SPEEDOMETER_ENT,
TBL_CARD_CUSTOMER.SPEEDOMETER_END,
TBL_CARD_CUSTOMER.SPEEDOMETER_RESULT,
TBL_CARD_CUSTOMER.BUSINESS_TRIP
FROM TBL_JOURNAL_TRAVEL
INNER JOIN TBL_REF_CAR ON (TBL_JOURNAL_TRAVEL.IDAVTO = TBL_REF_CAR.ID_AVTO)
INNER JOIN TBL_CARD_CUSTOMER ON (TBL_JOURNAL_TRAVEL.ID_TRAVEL = TBL_CARD_CUSTOMER.TRAVEL_ID)
INNER JOIN TBL_REF_CLIENT ON (TBL_CARD_CUSTOMER.CLIENT_ID = TBL_REF_CLIENT.ID_CLIENT)
INNER JOIN TBL_REF_FIRMS ON (TBL_REF_CLIENT.ID_FIRMS = TBL_REF_FIRMS.ID_FIRM)
WHERE (
(TBL_JOURNAL_TRAVEL.DATE_TRAVEL BETWEEN :IN_ENTER and :IN_END) AND
(TBL_CARD_CUSTOMER.MINUTES > 0) AND
(TBL_REF_FIRMS.SHORT_NAME_FIRM <> :IN_FIRMS)
)
ORDER BY TBL_JOURNAL_TRAVEL.DATE_TRAVEL, TBL_CARD_CUSTOMER.TIME_ENT
INTO :OUT_ID_TRAVEL,
:OUT_NUM_TRAVELSHEET,
:OUT_DATE_TRAVEL,
: OUT_ID_AVTO,
:OUT_GOS_NUM,
:OUT_MARKA_AVTO,
:OUT_SHORT_NAME_FIRM,
:OUT_SIGNATURE_CLIENT,
:OUT_NAME_CLIENT,
:OUT_TIME_ENT,
:OUT_TIME_END,
:OUT_TIME_USAGE,
:OUT_MINUTES,
:OUT_SPEEDOMETER_ENT,
:OUT_SPEEDOMETER_END,
:OUT_SPEEDOMETER_RESULT,
:OUT_BUSINESS_TRIP
:(СЮДА НУЖНО ДОБАВИТЬ ТАРИФ)
DO SUSPEND;
END
необходимо добавит тариф актуальный на дату документа и автомобиль (OUT_ID_AVTO)
Виталий Панасенко (2005-08-11 09:19:00) [1]Тариф действителен на протяжении квартала ? Ну, тогда в таблицу движения (данных) добавь поле ID_QRT - ид квартала, например в виде ГОДКВАРТАЛ.. Или на два поля раздели.. И по этой связке ты сможешь выбрать данные о тарифах для каждой даты по авто...
Koala (2005-08-10 18:38:00) [2]
CREATE TABLE TBL_REF_TARIFF_GENERAL (
ID_TARIFF_GENERAL DM_INT NOT NULL /* DM_INT = INTEGER */,
ID_CAR_TARIFF DM_INT /* DM_INT = INTEGER */,
DATE_TARIFF DM_DATE /* DM_DATE = DATE */,
VALUE_TARIFF DM_FLOAT_TWO /* DM_FLOAT_TWO = NUMERIC(5,2) */,
DATE_EDIT DM_DATETIME /* DM_DATETIME = TIMESTAMP */,
USER_EDIT DM_USERS /* DM_USERS = VARCHAR(32) */
);
в справочнике тарифов есть поле ДАТА тарифа (я его подчеркнул)... (может я не правильно понял?)
> если конечно, он не меняется в течении дня...
тарифы вводятся 1 раз в квартал для каждого авто
более обобщенно:
есть справочник тарифов, справочник автомобилей и таблица данных, где заносятся данные по маршруту движения, клиенту, времени, и километражу,
ХП-шка выбирает данные о поездках за определенный период. в этуже ХП я хочу прекрутить выборку тарифов на дату документа под конкретный автомобиль, т.е. либо сделать вложенный select по условию даты либо еще как нибудь... вот я и спрашиваю помощи.....
Виталий Панасенко (2005-08-10 17:51:00) [3]А можешь более конкретно (или наоборот, более обобщенно(не знаю что лучше)) выдать, что тебе нужно.. Что ты хочешь получить ?.. Как ты собираешься связать авто с тарифами, если таблицы тарифов и авто не пересекаются ? Что мешает в таблице тарифов добавить поле Дата тарифа и в таблице авто завязать тарифы по этому ключу из таблицы тарифов ? что типа:
create table tarif( tarif_id integer not null,
tarif_date date not null,
tarif_value numeric(10,2) default 0 not null,
и тд
primary key(tarif_id, tarif_date)
);
create table avto_jrn( avto_id integer not null,
tarif_id integer not null,
tarif_date date not null,
и тд,
primary key(avto_id, tarif_date),
foreign key(tarif_id, tarif_date)
references tarif(tarif_id, trif_date)
on update cascade
);
Так мы сможем для авто получить его тариф на любой день.. если конечно, он не меняется в течении дня...
select * from avto a, tarif t where a.tarif_id=t.tarif_id and a.tarif_date=t.tarif_date and t.tarif_date=:date1
Koala (2005-08-10 17:28:00) [4]в тарифах есть поле(ID)
ID_CAR_TARIFFи в ХП есть полеOUT_ID_AVTOэто и есть поля отвечающие за ID автомобиля.
А не использую в ХП, потому что не знаю как прикрутить по условию: тариф актуальный на дату документа и автомобиль
Koala (2005-08-10 17:27:00) [5]в тарифах есть поле(ID)
ID_CAR_TARIFFи в ХП есть полеOUT_ID_AVTOэто и есть поля отвечающие за ID автомобиля.
А не использую в ХП, потому что не знаю как прикрутить по условию: тариф актуальный на дату документа и автомобиль
Виталий Панасенко (2005-08-10 10:50:00) [6]А как это возможно, если ты не используешь в ХП TBL_REF_TARIFF_GENERAL ? А не используешь, видимо, потому как не завязал авто с тарифами... А там, кто его знает, что ты там придумал...