2017-05-18 27 views
1

我正在製作一個Excel Oracle Query來實現以下功能。Excel Oracle查詢組功能不允許在這裏

我有兩個表,用命令一個表,並在開具發票和一張桌子與匯率和從該日起即率適用:

表JOBS:

ID INVOICE_DATE 
1 05-05-2017 
2 05-03-2017 
3 04-28-2017 
4 04-15-2017 
5 04-01-2017 
6 03-28-2017 
7 03-15-2017 
8 03-02-2017 
9 02-27-2017 

表EXCHG:

CURR RATE DATE_FROM 
USD 0.92 05-01-2017 
GBP 1.21 05-01-2017 
USD 0.95 04-04-2017 
GBP 1.18 04-04-2017 
USD 0.94 04-01-2017 
GBP 1.19 04-01-2017 
USD 0.91 03-03-2017 
GBP 1.17 03-03-2017 
USD 0.92 03-01-2017 
GBP 1.20 03-01-2017 
USD 0.93 02-01-2017 
GBP 1.21 02-01-2017 

我想獲得帶有發票日期和當時適用匯率的訂單。

目前,我有以下SQL查詢:

SELECT JOBS.ID, JOBS.INVOICE_DATE, EXCHG.CURR, EXCHG.RATE, EXCHG.DATE_FROM 

FROM LOC.JOBS JOBS 

LEFT JOIN LOC.EXCHG EXCHG 
ON (JOBS.INVOICE_DATE-EXCHG.DATE_FROM) >= 0) AND (JOBS.INVOICE_DATE-EXCHG.DATE_FROM <= 31) 

WHERE 
EXCHG.CURR = 'USD' 

,這是除了我得到一些訂單,兩個或兩個以上的匯率一倍做工精細:

ID INVOICE_DATE RATE_USD DATE_FROM 
1 5/5/2017  0.92  5/1/2017 
1 5/5/2017  0.95  4/4/2017 
2 5/3/2017  0.92  5/1/2017 
2 5/3/2017  0.95  4/4/2017 
3 4/28/2017  0.95  4/4/2017 
3 4/28/2017  0.94  4/1/2017 
4 4/15/2017  0.95  4/4/2017 
4 4/15/2017  0.94  4/1/2017 
5 4/1/2017  0.94  4/1/2017 
5 4/1/2017  0.91  3/3/2017 
5 4/1/2017  0.92  3/1/2017 
6 3/28/2017  0.91  3/3/2017 
6 3/28/2017  0.92  3/1/2017 
7 3/15/2017  0.91  3/3/2017 
7 3/15/2017  0.92  3/1/2017 
8 3/2/2017  0.92  3/1/2017 
8 3/2/2017  0.93  2/1/2017 
9 2/27/2017  0.93  2/1/2017 

我想什麼得到是:

ID INVOICE_DATE RATE_USD DATE_FROM 
1 5/5/2017  0.92  5/1/2017 
2 5/3/2017  0.92  5/1/2017 
3 4/28/2017  0.95  4/4/2017 
4 4/15/2017  0.95  4/4/2017 
5 4/1/2017  0.94  4/1/2017 
6 3/28/2017  0.91  3/3/2017 
7 3/15/2017  0.91  3/3/2017 
8 3/2/2017  0.92  3/1/2017 
9 2/27/2017  0.93  2/1/2017 

我想弄清楚如何做到這一點,不知何故,我需要選擇這兩個語句的結果最低:

JOBS.INVOICE_DATE-EXCHG.DATE_FROM >= 0 AND JOBS.INVOICE_DATE-EXCHG.DATE_FROM <= 31 

最好我能想出是:

SELECT JOBS.ID, JOBS.INVOICE_DATE, EXCHG.CURR, EXCHG.RATE, EXCHG.DATE_FROM 

FROM LOC.JOBS JOBS 

LEFT JOIN LOC.EXCHG EXCHG 
ON (MIN(JOBS.INVOICE_DATE-EXCHG.DATE_FROM) AND (JOBS.INVOICE_DATE-EXCHG.DATE_FROM >= 0)) 

WHERE 
EXCHG.CURR = 'USD' 

但是這給了我以下錯誤: [甲骨文] [ODBC] [奧拉] ORA-00934:此處不允許使用組功能

有人可以爲我解決這個問題嗎?我會很開心。

弗洛里斯

PS。這這裏是我的第一個問題,所以我希望這是好的:)

回答

0

「你能夠工作的最簡單的事情」 - 沃德·坎寧安

我建議你將另一列添加到名爲DATE_TO您EXCHG表格,它表示匯率的到期日。無論何時您獲得特定貨幣的新匯率,您都可以在任何與貨幣匹配的行上設置DATE_TO,並且DATE_TO = NULL,這可以使用複合觸發器完成。然後您的查詢變爲:

SELECT j.ID, 
     j.INVOICE_DATE, 
     e.CURR, 
     e.RATE, 
     e.DATE_FROM 
    FROM LOC.JOBS j 
    LEFT OUTER JOIN LOC.EXCHG e 
    ON (j.INVOICE_DATE BETWEEN e.DATE_FROM 
          AND e.DATE_TO) OR 
     (e.DATE_FROM <= j.INVOICE_DATE AND e.DATE_TO IS NULL) 
    WHERE e.CURR = 'USD' 

祝您好運。

+0

謝謝鮑勃,但我非常想在EXCHG表中添加一列是不可能的。該表不在我的控制之下,並且基於不再更新的非常舊的系統。你有什麼其他的建議? – Floris