2016-06-06 2 views
0

이 내 쿼리SQL 쿼리 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) 

내가이 코드를 사용 인 경우에 노력하고 사용 DECODE, 내가 문제가되지 있습니다. 다음은 결과입니다 The Result

그러나 지금은 WHERE 절 "Fecha의 recepcion"에 포함해야합니다> '01// 2016 01 'AND'Fecha의 recepcion "< '06/06/2016 '.

도와 드릴까요?

+0

왜 조건을 간단히 추가 할 수 없습니까? 무슨 문제있어? – Aleksej

+0

@Aleksej이 오류를 추가하려고하면 QUARY VALIDATION FAILED : ORA-00904 : "Fecha recepcion": 잘못된 식별자 –

+0

Ask을 해독하려고하는 사용자 : Asker가 다음과 같은 별칭을 사용하여 쿼리를 필터링하려고합니다. 'MAX (DECODE (...)) '함수가 있습니다. –

답변

2

내 생각 엔 잘못된 위치에 추가하려고합니다. 내부 선택에서 계산되므로 WHERE 절에서 사용할 수 있으려면 다른 선택으로 포장해야합니다 (적어도) 오라클 :이 열이 모든 일처럼 보이지 않는다, 그래서 TO_DATE()를 사용하여 날짜 범위의 기능이이 날짜로 포맷해야 사용할

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

알 불구하고 :

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

첫 번째 솔루션이 작동하지만 두 번째 솔루션을 사용하는 경우 "not valid 월 "@ sagi –

+0

하, 왜 첫 번째 1 :) @ FranciscoJavierYanesDelgado – sagi

0

이 만 너는 너의 상태를 내선에 추가 할 필요가있는 것 같다. 암시 적 전환에 의존하지 않고 일반적인 쿼리 :

WHERE "Fecha recepcion" > to_date('01/01/2016', 'DD/MM/YYYY') 
    AND "Fecha recepcion" < to_date('06/06/2016', 'DD/MM/YYYY') 
+0

아니 유효 개월 –

+1

당신의 열의 데이터 형식은 무엇입니까? 문자열 일 경우 '05/05/2017 '은 '01/01/2016'과 '06/06/2016'사이에오고, 2017 년 5 월 5 일은 2016 년 1 월 1 일과 6 월 6 일 사이에 있지 않습니다. 문자열은 비록 그들이 그들이있는 것처럼 보일지라도, 날짜는 아닙니다. – Boneist

+0

varchar에 날짜가 들어있는 열이 있습니까? 그렇다면 어떤 형식입니까? – Aleksej