Форум: "Начинающим";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизПомогите правильно составить запрос.... FB 1.5 Найти похожие ветки
← →
Koala © (2005-08-09 19:35) [0]Есть справочник тарифов
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-10 10:50) [1]А как это возможно, если ты не используешь в ХП TBL_REF_TARIFF_GENERAL ? А не используешь, видимо, потому как не завязал авто с тарифами... А там, кто его знает, что ты там придумал...
← →
Koala © (2005-08-10 17:27) [2]в тарифах есть поле(ID)
ID_CAR_TARIFF
и в ХП есть полеOUT_ID_AVTO
это и есть поля отвечающие за ID автомобиля.
А не использую в ХП, потому что не знаю как прикрутить по условию: тариф актуальный на дату документа и автомобиль
← →
Koala © (2005-08-10 17:28) [3]в тарифах есть поле(ID)
ID_CAR_TARIFF
и в ХП есть полеOUT_ID_AVTO
это и есть поля отвечающие за ID автомобиля.
А не использую в ХП, потому что не знаю как прикрутить по условию: тариф актуальный на дату документа и автомобиль
← →
Виталий Панасенко (2005-08-10 17:51) [4]А можешь более конкретно (или наоборот, более обобщенно(не знаю что лучше)) выдать, что тебе нужно.. Что ты хочешь получить ?.. Как ты собираешься связать авто с тарифами, если таблицы тарифов и авто не пересекаются ? Что мешает в таблице тарифов добавить поле Дата тарифа и в таблице авто завязать тарифы по этому ключу из таблицы тарифов ? что типа:
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 18:38) [5]
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-11 09:19) [6]Тариф действителен на протяжении квартала ? Ну, тогда в таблицу движения (данных) добавь поле ID_QRT - ид квартала, например в виде ГОДКВАРТАЛ.. Или на два поля раздели.. И по этой связке ты сможешь выбрать данные о тарифах для каждой даты по авто...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c