Sql Query尝试在ORACLE中使用DECODE

时间:2016-06-06 13:51:06

标签: oracle

这是我的查询

SELECT *
  FROM (SELECT   cexp.expediente.num_expe "Num. Expediente",
                 cexp.expediente.cod_tipo_expe Tipo,
                 cexp.expediente.nif NIF, cexp.expediente.interesado "Razon Social",
                 MAX (DECODE (a.descripcion,
                              'NUMERO_FACTURA', cexp.md_valores.valor,
                              NULL
                             )
                     ) "Numero Factura",
                 MAX (DECODE (a.descripcion,
                              'IMPORTE_FACTURA', cexp.md_valores.valor,
                              NULL
                             )
                     ) "Importe bruto",
                 MAX (DECODE (a.descripcion,
                              'IMPORTE_NETO', cexp.md_valores.valor,
                              NULL
                             )
                     ) "Importe neto",
                 MAX (DECODE (a.descripcion,
                              'FECHA_PRESENTACION_FACTURA', cexp.md_valores.valor,
                              NULL
                             )
                     ) "Fecha recepcion"
            FROM cexp.md_propiedades a

                 RIGHT JOIN
                 (cexp.expediente RIGHT JOIN cexp.md_valores
                 ON cexp.expediente.num_expe = cexp.md_valores.num_expe)
                 ON (a.propiedad = md_valores.propiedad)
               AND (a.cod_tipo_expe = md_valores.cod_tipo_expe) 
           WHERE (cexp.expediente.cod_tipo_acto = '12EO' AND (cexp.expediente.cod_tipo_expe='CM11' OR cexp.expediente.cod_tipo_expe='FA11' OR cexp.expediente.cod_tipo_expe='CM08' OR cexp.expediente.cod_tipo_expe='FA09'))
        GROUP BY cexp.expediente.num_expe,
                 cexp.expediente.interesado,
                 cexp.expediente.nif,
                 cexp.expediente.cod_tipo_expe)

当我使用此代码时,我没有问题。这是结果: The Result

但是现在我需要在WHERE子句中包含“Fecha recepcion”> '01 / 01/2016'和“Fecha recepcion”< '06 / 06 / 2016' 。

可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我的猜测是你试图将它添加到错误的位置,它是在内部选择中计算的,因此 - 你需要用另一个select包装它以便能够在WHERE子句中使用它(至少对Oracle而言):

SELECT * FROM (
..... Your Query Here
)
WHERE "Fecha recepcion" between '01/01/2016' and '06/06/2016'.

尽管此列似乎​​根本不是日期,并且要使用日期范围功能,因此应使用TO_DATE()将其格式化为日期,以便:

WHERE "Fecha recepcion" between to_date('01/01/2016','dd/mm/yyyy') and to_date('06/06/2016','dd/mm/yyyy').

答案 1 :(得分:0)

您似乎只需要将条件添加到外部查询,而不依赖于隐式转换:

return $this;