Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1124823535
Korvet
2005-08-23 22:58
2005.09.18
Подключение к сети


14-1124394968
TG
2005-08-18 23:56
2005.09.18
Windows Vista


2-1123601748
Koala
2005-08-09 19:35
2005.09.18
Помогите правильно составить запрос.... FB 1.5


14-1124833465
desam
2005-08-24 01:44
2005.09.18
Зацените!


14-1124540053
Santrope
2005-08-20 16:14
2005.09.18
При какм зрении нельзя водить автомобиль?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский