ayuda con SQL

17/12/2003 - 15:28 por Lmaldona | Informe spam
Amigos,

Ayudenme con SQL, por favor

Tengo este SQL que estoy usando DECODE y la verdad es que
no funciona, alguien de la comunidad me pude ayudar, me
arroja el siguiente mensaje

ORA-0095 Falta expresion clave

El SQL es el siguiente :

PO_VENDORS.VENDOR_NAME NOMBRE ,
PO_VENDORS.SEGMENT1 RUT ,
FND_LOOKUP_VALUES_VL.MEANING RUBRO ,
DECODE(TO_CHAR(INVOICE_DATE,'YYYY'),'2003' ,
SUM(TO_NUMBER(AP_INVOICES_ALL.INVOICE_AMOUNT) ))
TOTAL_2003,
DECODE(TO_CHAR(INVOICE_DATE,'YYYY'),'2002' ,
SUM(TO_NUMBER(AP_INVOICES_ALL.INVOICE_AMOUNT) ))
TOTAL_2002
FROM
AP.AP_INVOICES_ALL AP_INVOICES_ALL,
PO.PO_VENDORS PO_VENDORS,
APPS.FND_LOOKUP_VALUES_VL FND_LOOKUP_VALUES_VL,
AP.AP_INVOICE_PAYMENTS_ALL AP_INVOICE_PAYMENTS_ALL,
PO.PO_VENDOR_SITES_ALL PO_VENDOR_SITES_ALL
WHERE
( AP_INVOICES_ALL.VENDOR_ID =
PO_VENDORS.VENDOR_ID ) AND
( PO_VENDORS.VENDOR_TYPE_LOOKUP_CODE =
FND_LOOKUP_VALUES_VL.LOOKUP_CODE ) AND
( AP_INVOICES_ALL.INVOICE_ID =
AP_INVOICE_PAYMENTS_ALL.INVOICE_ID ) AND
( AP_INVOICES_ALL.VENDOR_SITE_ID =
PO_VENDOR_SITES_ALL.VENDOR_SITE_ID ) AND
( FND_LOOKUP_VALUES_VL.LOOKUP_TYPE = 'VENDOR
TYPE' ) AND
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE
= 'FACTURA' ) OR
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE = 'FACTURA
SALON' ) OR
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE
= 'ANTICIPO' ) AND
( AP_INVOICE_PAYMENTS_ALL.AMOUNT > 0 )

AND
TO_CHAR(INVOICE_DATE) BETWEEN '01/01/02'
OR '31/12/03'

HAVING ( SUM(AP_INVOICES_ALL.INVOICE_AMOUNT) = SUM
(AP_INVOICES_ALL.INVOICE_AMOUNT ) )
GROUP BY
FND_LOOKUP_VALUES_VL.MEANING ,
PO_VENDORS.VENDOR_NAME ,
PO_VENDORS.SEGMENT1
ORDER BY
FND_LOOKUP_VALUES_VL.MEANING ASC,
PO_VENDORS.VENDOR_NAME ASC,
PO_VENDORS.SEGMENT1 ASC
 

Leer las respuestas

#1 Javier Loria
17/12/2003 - 18:24 | Informe spam
Hola:
DECODE es una construccion de ORACLE que no existe fuera de ORACLE, si
quieres usar SQL deberas usar el CASE. Revisa la documentacion en linea
(BOL) sobre la sintaxis tiene 2 formas:
SELECT CASE WHEN (Condicion1) THEN Valor1
WHEN (Condicion2) THEN Valor2
...
END

O su alternativa (mas parecida al DECODE)
SELECT CASE Columna WHEN ValorA THEN Valor1
WHEN ValorB THEN Valor2
...
END

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Lmaldona escribio:
Amigos,

Ayudenme con SQL, por favor

Tengo este SQL que estoy usando DECODE y la verdad es que
no funciona, alguien de la comunidad me pude ayudar, me
arroja el siguiente mensaje

ORA-0095 Falta expresion clave

El SQL es el siguiente :

PO_VENDORS.VENDOR_NAME NOMBRE ,
PO_VENDORS.SEGMENT1 RUT ,
FND_LOOKUP_VALUES_VL.MEANING RUBRO ,
DECODE(TO_CHAR(INVOICE_DATE,'YYYY'),'2003' ,
SUM(TO_NUMBER(AP_INVOICES_ALL.INVOICE_AMOUNT) ))
TOTAL_2003,
DECODE(TO_CHAR(INVOICE_DATE,'YYYY'),'2002' ,
SUM(TO_NUMBER(AP_INVOICES_ALL.INVOICE_AMOUNT) ))
TOTAL_2002
FROM
AP.AP_INVOICES_ALL AP_INVOICES_ALL,
PO.PO_VENDORS PO_VENDORS,
APPS.FND_LOOKUP_VALUES_VL FND_LOOKUP_VALUES_VL,
AP.AP_INVOICE_PAYMENTS_ALL AP_INVOICE_PAYMENTS_ALL,
PO.PO_VENDOR_SITES_ALL PO_VENDOR_SITES_ALL
WHERE
( AP_INVOICES_ALL.VENDOR_ID > PO_VENDORS.VENDOR_ID ) AND
( PO_VENDORS.VENDOR_TYPE_LOOKUP_CODE > FND_LOOKUP_VALUES_VL.LOOKUP_CODE ) AND
( AP_INVOICES_ALL.INVOICE_ID > AP_INVOICE_PAYMENTS_ALL.INVOICE_ID ) AND
( AP_INVOICES_ALL.VENDOR_SITE_ID > PO_VENDOR_SITES_ALL.VENDOR_SITE_ID ) AND
( FND_LOOKUP_VALUES_VL.LOOKUP_TYPE = 'VENDOR
TYPE' ) AND
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE
= 'FACTURA' ) OR
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE = 'FACTURA
SALON' ) OR
( PO_VENDOR_SITES_ALL.VENDOR_SITE_CODE
= 'ANTICIPO' ) AND
( AP_INVOICE_PAYMENTS_ALL.AMOUNT > 0 )

AND
TO_CHAR(INVOICE_DATE) BETWEEN '01/01/02'
OR '31/12/03'

HAVING ( SUM(AP_INVOICES_ALL.INVOICE_AMOUNT) = SUM
(AP_INVOICES_ALL.INVOICE_AMOUNT ) )
GROUP BY
FND_LOOKUP_VALUES_VL.MEANING ,
PO_VENDORS.VENDOR_NAME ,
PO_VENDORS.SEGMENT1
ORDER BY
FND_LOOKUP_VALUES_VL.MEANING ASC,
PO_VENDORS.VENDOR_NAME ASC,
PO_VENDORS.SEGMENT1 ASC

Preguntas similares