Sql 此处不允许使用Excel Oracle查询组功能
我正在进行Excel Oracle查询,以实现以下功能 我有两个表,一个表显示订单和发票开具时间,另一个表显示汇率和汇率适用日期: 表作业:Sql 此处不允许使用Excel Oracle查询组功能,sql,excel,oracle,odbc,Sql,Excel,Oracle,Odbc,我正在进行Excel Oracle查询,以实现以下功能 我有两个表,一个表显示订单和发票开具时间,另一个表显示汇率和汇率适用日期: 表作业: 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 R
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
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
但这给了我以下错误:
[Oracle][ODBC][Ora]Ora-00934:此处不允许使用组函数
有人能帮我解决这个问题吗?我会非常高兴的
弗洛里斯
注:这是我在这里的第一个问题,所以我希望它是好的:)“做最简单的事情,可能会工作”-沃德·坎宁安
我建议您在EXCHG表中添加另一个名为DATE_的列,该列表示汇率的到期日期。每当您获得某一特定货币的新汇率时,无论哪一行与该货币匹配,并且DATE_为=NULL,都可以使用复合触发器将DATE_设置为。然后您的查询变成:
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'
选择j.ID,
j、 发票日期,
e、 咖喱,
e、 比率,
e、 日期
来自LOC.JOBS j
左外连接位置EXCHG e
日期(j)发票日期介于e日期
和e.DATE_TO)或
(e.DATE_来自“做可能可行的最简单的事情”-沃德·坎宁安
我建议您在EXCHG表中添加另一个名为DATE_的列,该列表示汇率的到期日期。每当您获得特定货币的新汇率时,您可以在与该货币匹配且DATE_to=NULL的任何行上将DATE_设置为,这可以使用复合触发器来完成。然后您的查询变成:
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'
选择j.ID,
j、 发票日期,
e、 咖喱,
e、 比率,
e、 日期
来自LOC.JOBS j
左外连接位置EXCHG e
日期(j)发票日期介于e日期
和e.DATE_TO)或
(e.DATE_,来自Thank you Bob,但我担心无法向EXCHG表中添加列。该表不在我的控制之下,并且基于一个不再更新的非常旧的系统。您有任何其他建议吗?谢谢Bob,但我担心无法向EXCHG表中添加列。该表不在我的控制之下,并且基于一个非常旧的系统在一个已经不再更新的非常旧的系统上。你还有其他建议吗?
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'