2016-06-06 6 views
0

Dies ist meine AbfrageSQL-Abfrage versuchen Verwendung DECODE in dem 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) 

Wenn ich diesen Code verwenden, habe ich nicht Problem. Dies ist das Ergebnis: The Result

Aber jetzt i enthalten muß in der WHERE-Klausel "Fecha recepcion"> '01/01/2016' AND "Fecha recepcion" < '06/06/2016' .

Kann mir dabei helfen?

+0

Warum können Sie nicht einfach die Bedingung hinzufügen? Welches Problem hast du? – Aleksej

+0

@Aleksej Wenn ich versuche, fügen Sie dies der Fehler ist dies: QUERY VALIDATION FEHLGESCHLAGEN: ORA-00904: "Fecha recepcion": Ungültige Kennung –

+0

Für diejenigen, die den ask zu entschlüsseln: der Fragesteller möchte die Abfrage basierend auf dem Alias-Ergebnis von filtern die 'MAX (DECODE (...))' Funktionen. –

Antwort

2

Meine Vermutung ist, dass Sie versuchen, es an der falschen Stelle hinzuzufügen, es in der inneren Auswahl berechnet wird, daher - Sie müssen es mit einem anderen auswählen, um es in der WHERE Klausel verwenden können (mindestens mit Oracle):

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

Al obwohl diese Spalte nicht wie Datum überhaupt nicht erscheinen, und Datumsbereich Funktionen zu verwenden, um dies als Datum TO_DATE() mit so formatiert werden sollen:

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

Wenn ich die erste Lösung funktioniert, aber wenn ich die zweite Lösung verwenden, sagen Sie mir das Programm "nicht gültig Monat "@sagi –

+0

Hah, nicht sicher warum, dann benutze die erste 1 :) @FranciscoJavierYanesDelgado – sagi

0

Es ist nur scheint, dass Sie Ihre Bedingung zu ext hinzufügen müssen normale Abfrage, ohne auf implizite Konvertierungen angewiesen zu sein:

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

Kein gültiger Monat –

+1

Was ist der Datentyp deiner Spalte? Denn wenn es sich um eine Saite handelt, würde "05.05.2017" zwischen "01.01.2016" und "06.06.2016" liegen, während der 5. Mai 2017 nicht zwischen dem 1. Januar und dem 6. Juni 2016 liegen würde keine Daten, auch wenn sie so aussehen wie sie sind. – Boneist

+0

Sind Ihre Spalten varchar mit Datumsangaben? Wenn ja, welches Format? – Aleksej