Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 此处不允许使用Excel Oracle查询组功能_Sql_Excel_Oracle_Odbc - Fatal编程技术网

Sql 此处不允许使用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

我正在进行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   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'