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

Вниз

Помогите правильно составить запрос.... 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
4-1122322363
Aldaris
2005-07-26 00:12
2005.09.18
Речевой движок Digalo


2-1123688945
pasha_golub
2005-08-10 19:49
2005.09.18
FreePascal


10-1102961595
normandia
2004-12-13 21:13
2005.09.18
добавление надписи в документ word


3-1123133263
k2
2005-08-04 09:27
2005.09.18
Курсорные переменные (oracle)


1-1124949807
ShiFT
2005-08-25 10:03
2005.09.18
FileMapping и TList