2016-02-11 54 views
0

我有兩個tables.Table比爾編寫sql查詢在Teradata數據有以下字段:如何根據多個條件

Field_Name Field_Type 
=============================== 
Bill_Sts_Sk decimal(18) PK 
epn_id  bigint  child key 
epn_seq_id bigint  child key 
ref_id  integer  child key 

表CLM_Crg有以下字段:

Field_Name Field_Type 
=============================== 
Bill_Sts_Sk decimal(18) 
epn_id  bigint  PK 
epn_seq_id bigint  PK 
ref_id  integer  PK 

我需要仰視Bill_Sts_Sk針對BILL表的父母鍵(Bill_Sts_Sk)。以下是查詢條件:

查找關於epn_id BILL匹配,
epn_seq_id和REF_ID

如果沒有找到, 再試一次只使用第2場。

如果找不到使用默認值-1。

如果發現超過1個鍵,使用最大值

我們如何可以通過編寫一個SQL查詢實現的呢?我已經寫了下面的查詢第一部分:

select Bill_Sts_Sk 
from Bill bl 
left join CLM_CRG crg 
ON bl.epn_id = crg.epn_id 
and bl.epn_seq_id = crg.epn_seq_id 
and bl.ref_id = crg.ref_id 

可以在任何任何請幫我寫在Teradata數據爲上述條件的SQL查詢(14.10.06.05)

回答

2

你可以加入對前兩列然後尋找使用ROW_NUMBER的最佳匹配:

SELECT bl.*, COALESCE(crg.Bill_Sts_Sk, -1) 
FROM Bill bl 
LEFT JOIN CLM_CRG crg 
ON bl.epn_id = crg.epn_id 
AND bl.epn_seq_id = crg.epn_seq_id 
QUALIFY 
    ROW_NUMBER() 
    OVER (PARTITION BY bl.epn_id, bl.epn_seq_id 
     ORDER BY CASE WHEN bl.ref_id = crg.ref_id THEN 1 ELSE 2 END -- best: matching ref_ids 
        ,crg.Bill_Sts_Sk DESC) = 1 -- 2nd best: highest Bill_Sts_St 

這種情況的最好PI將是對(epn_id,epn_seq_id)兩個表。