2010-01-22 37 views
5

¿Alguien sabe cómo evitar este error? este sql funciona bien, pero para la función de partición 'cumulinvoiced'. Estoy tratando de agregar un total acumulado, pero no parece funcionar en vistas en línea.ORA-30483: las funciones de ventana no están permitidas aquí

SELECT a.mois, a.supid, a.status, COUNT (a.status), 
     SUM (COUNT (a.status) OVER (ORDER BY a.status, a.supid, a.dossier, a.mois)) cumulinvoiced 
from (SELECT TO_CHAR (impdate, 'YYYYMM') mois, 
      benefit#sup_inv_id supid, 
      SUBSTR (si_benstatus, 1, 1) status, 
      files#fil_secid dossier 
     FROM sbbenefit 
     WHERE benefit#sup_inv_id = 30515 
     AND SUBSTR(si_benstatus, 1, 1) = '2' 
    GROUP BY TO_CHAR (impdate, 'YYYYMM'), benefit#sup_inv_id ,SUBSTR (si_benstatus, 1, 1), files#fil_secid) a 
GROUP BY a.mois, a.supid, a.status 
order BY a.supid, a.mois , a.status 
+0

¿Podría proporcionar un ejemplo del SQL que está intentando que no funciona y genera el ORA-30483? –

Respuesta

5

El agregado COUNT debería ser un argumento para la analítica SUM, no al revés:

SELECT a.mois, a.supid, a.status, COUNT (a.status), 
     SUM (COUNT (a.status)) OVER (ORDER BY a.status, a.supid, a.dossier, a.mois) cumulinvoiced 
from (SELECT TO_CHAR (impdate, 'YYYYMM') mois, 
      benefit#sup_inv_id supid, 
      SUBSTR (si_benstatus, 1, 1) status, 
      files#fil_secid dossier 
     FROM sbbenefit 
     WHERE benefit#sup_inv_id = 30515 
     AND SUBSTR(si_benstatus, 1, 1) = '2' 
    GROUP BY TO_CHAR (impdate, 'YYYYMM'), benefit#sup_inv_id ,SUBSTR (si_benstatus, 1, 1), files#fil_secid) a 
GROUP BY a.mois, a.supid, a.status 
order BY a.supid, a.mois , a.status 
0

La analítica y la agrupación no suelen funcionar juntas. Si se realiza la primera agrupación luego hacer la consulta analítica frente a ese resultado, creo que debería funcionar:

SELECT mois, supid, status, status_count, 
     SUM (status_count OVER (ORDER BY a.status, a.supid, a.dossier, a.mois)) cumulinvoiced 
from 
(SELECT a.mois, a.supid, a.status, COUNT (a.status) status_count 
from 
(
SELECT 
TO_CHAR (impdate, 'YYYYMM') mois, 
benefit#sup_inv_id supid, 
SUBSTR (si_benstatus, 1, 1) status, 
files#fil_secid dossier 
FROM sbbenefit 
WHERE benefit#sup_inv_id = 30515 
AND SUBSTR (si_benstatus, 1, 1) = '2' 
GROUP BY 
TO_CHAR (impdate, 'YYYYMM'), 
benefit#sup_inv_id , 
SUBSTR (si_benstatus, 1, 1), 
files#fil_secid 
) a 
GROUP BY 
a.mois, a.supid, a.status 
) 
order BY 
supid, mois , status 
+3

Los agregados y los análisis pueden funcionar juntos de manera correcta, pero los agregados deben ser argumentos para el análisis. – Quassnoi

Cuestiones relacionadas