2011-06-29 37 views
1

類型添加列I HV兩個表: -如何基於特定日期範圍與

First Table:- 
EFF_DATE  RATE CURRENCY TYPE 
20110101  1.286 USD   1 
20110101  1.300 USD   2 
20110201  1.275 USD   1 
20110201  1.290 USD   2 
20110301  1.275 USD   1 
20110301  1.285 USD   2 
20110401  1.260 USD   1 
20110401  1.270 USD   2 
20110501  1.225 USD   1 
20110501  1.230 USD   2 

第二表: -

PO_NO TRANS_DATE ACCT_DATE SUPP_NO CURRENCY  LOCAL_AMT 
1000068 20110114 20110115 S016 USD   16,500.00 
1000070 20110214 20110215 S016 USD   7,660.00 
1000072 20110317 20110322 S025 USD   1,080.00 
1000132 20110314 20110315 S037 USD   3,500.00 
1000133 20110414 20110415 S038 USD   14,500.00 

基於ACCT_DATE & TYPE = 1,我想添加費率欄&的結果應該是這樣的: -

PO_NO TRANS_DATE ACCT_DATE SUPP_NO CURRENCY  LOCAL_AMT RATE 
1000068 20110114 20110115 S016 USD   16,500.00 1.286 
1000070 20110214 20110215 S016 USD   7,660.00 1.275 
1000072 20110317 20110322 S025 USD   1,080.00 1.275 
1000132 20110314 20110315 S037 USD   3,500.00 1.275 
1000133 20110414 20110415 S038 USD   14,500.00 1.26 
1000170 20110531 20110531 S016 USD   15,400.00 1.225 

我用下面的SQLŧ o運行,但由於某些原因,它只是保持循環沒有任何輸出: -

SELECT st.*, ft.rate 
FROM second_table st 
LEFT JOIN first_table ft 
    ON (MONTH(acct_date) = MONTH(eff_date) AND YEAR(acct_date) = YEAR(eff_date)) 
where ft.TYPE=1 

請幫助。

謝謝。

+0

生效日期是否始終保證是各自月份的第一個月份? –

+0

是............ – Bob

回答

1

不是很大。如果我刪除ft.TYPE = 1, 它會立即生成幾乎 的結果。基於您的評論

上面你需要把指數ft.TYPE

你也可以建立這樣的查詢可能提高如何優化運行查詢

SELECT st.*, ft.rate 
FROM second_table st 
LEFT JOIN first_table ft 
    ON ft.TYPE=1 AND MONTH(acct_date) = MONTH(eff_date) AND YEAR(acct_date) = YEAR(eff_date) 

此外,日期是以字符串還是以日期時間值存儲。如果它們存儲爲字符串,則應該進行字符串比較而不是轉換爲日期時間,然後提取月份和年份。

+0

非常感謝你....它的作品。 – Bob

+0

不客氣,祝你好運 – Hogan

0

你的桌子有多大?你加入agrigate功能,所以它會很慢,如果表格很大

+0

不是很大。如果我刪除ft.TYPE = 1,它會立即生成結果。 – Bob