Нужна помощь в хранимых процессах SQL - присоединение - PullRequest
0 голосов
/ 02 марта 2011

Итак, у меня есть этот раздел моего процесса:

SELECT
        com_contact.rc_name_full as CreatedBy,
        capComponent.cm_strike as CapStrike,
        floorComponent.cm_strike as FloorStrike,
        tq_nominal_notional as Notional,
        maxComponent.cm_effective_dt as EffectiveDate,
        maxComponent.cm_maturity_dt as MaturityDate,
        CAST(CAST(DATEDIFF(mm,maxComponent.cm_effective_dt,maxComponent.cm_maturity_dt) as decimal(9,2))/12 as decimal(9,2)) as term,
        (
            CASE WHEN se_amort_term_mnth IS NOT NULL THEN se_amort_term_mnth / 12
            ELSE CAST(CAST(DATEDIFF(mm,
                ISNULL(cmam_amortization_start_dt, maxComponent.cm_effective_dt),
                cmam_amortization_end_dt) as decimal(9,2))/12 as decimal(9,2))
            END
        ) AS AmortTermYears,
        tq_dd_product as Product,
        dh_key_rate as KeyRate,
        dh_pv01 as PV01,
        dh_val_time_stamp as RateTimeStamp,
        re_bnk_le.re_company_name as Company,
        rc_contact_id as UserId,
        stp_name as NickName,
        '' as project,
        '' as Borrower,
        '' as Lender,
        '' as AdditionalInfo,
        CASE WHEN tpm_pd_permission_id = 85 THEN 'LLH' WHEN tpm_pd_permission_id = 86 THEN 'ALM' ELSE '' END as Permission,
        tr_transaction_id as TransactionId,
        NULL as IndicationId

    FROM cfo_transaction

Строка с надписью '' as project, нам нужно изменить, чтобы вернуть данные.

Таблица рядом сFROM, называемый cfo_transaction, имеет идентификатор, называемый tr_transaction_id.У нас есть еще одна таблица с именем com_project_transaction_link, которая связывает эти идентификаторы с идентификаторами проектов, используя два столбца с именами:

pt_tr_transaction_id и pt_pj_project_id, а затем у нас есть таблица, содержащая все проекты с именем com_project с pj_project_id и pj_project_name.

ЦЕЛЬ: вернуть pj_project_name из таблицы проектов, где он связан с извлекаемыми транзакциями.

Я действительно не знаюзнать, как это сделать.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 марта 2011
SELECT ..., cp.pj_project_name
    FROM cfo_transaction ct
        INNER JOIN com_project_transaction_link cptl
            ON ct.tr_transaction_id = cptl.pt_tr_transaction_id
        INNER JOIN com_project cp
            ON cptl.pt_pj_project_id = cp.pj_project_id
0 голосов
/ 02 марта 2011

Попробуйте:

SELECT
        com_contact.rc_name_full as CreatedBy,
        capComponent.cm_strike as CapStrike,
        floorComponent.cm_strike as FloorStrike,
        tq_nominal_notional as Notional,
        maxComponent.cm_effective_dt as EffectiveDate,
        maxComponent.cm_maturity_dt as MaturityDate,
        CAST(CAST(DATEDIFF(mm,maxComponent.cm_effective_dt,maxComponent.cm_maturity_dt) as decimal(9,2))/12 as decimal(9,2)) as term,
        (
            CASE WHEN se_amort_term_mnth IS NOT NULL THEN se_amort_term_mnth / 12
            ELSE CAST(CAST(DATEDIFF(mm,
                ISNULL(cmam_amortization_start_dt, maxComponent.cm_effective_dt),
                cmam_amortization_end_dt) as decimal(9,2))/12 as decimal(9,2))
            END
        ) AS AmortTermYears,
        tq_dd_product as Product,
        dh_key_rate as KeyRate,
        dh_pv01 as PV01,
        dh_val_time_stamp as RateTimeStamp,
        re_bnk_le.re_company_name as Company,
        rc_contact_id as UserId,
        stp_name as NickName,
        PR.pj_project_name as project,
        '' as Borrower,
        '' as Lender,
        '' as AdditionalInfo,
        CASE WHEN tpm_pd_permission_id = 85 THEN 'LLH' WHEN tpm_pd_permission_id = 86 THEN 'ALM' ELSE '' END as Permission,
        tr_transaction_id as TransactionId,
        NULL as IndicationId

    FROM cfo_transaction TR
    INNER JOIN com_project_transaction_link TL
    ON TR.tr_transaction_id = TL.pt_tr_transaction_id
    INNER JOIN com_project PR
    ON TL.pt_pj_project_id = PR.pj_project_id 

В приведенном выше запросе предполагается, что каждая транзакция и проект находятся в таблице, объединяющей ваши таблицы проектов и транзакций (таким образом, INNER JOIN), но вы можете изменить их наLEFT JOIN если хочешь

0 голосов
/ 02 марта 2011

Вы просто добавляете второе соединение к другой таблице в запрос.

select 
    yourfields,
    p.pj_project_name as project
FROM cfo_transaction t
join com_project_transaction_link tl
  on t.tr_transaction_id = tl.pt_tr_transaction_id
join com_project p
  on tl.pt_pj_project_id = p.pj_project_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...