2011-03-02 65 views
0

所以,我有我的PROC的这一部分:需要一些SQL存储过程的帮助 - 加盟

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的ID。我们有一个叫做com_project_transaction_link另一个表,链接这些ID与项目的ID,用两个两列名为:

pt_tr_transaction_idpt_pj_project_id,然后我们有一个包含具有pj_project_idpj_project_name称为com_project所有项目的表格。

目标:从该项目表中返回pj_project_name,在该项目表中链接正在被拉的事务。

我真的不知道该怎么做。

谢谢!

回答

0

试试这个:

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

您只需向查询添加第二个连接到另一个表。

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 
0
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