2010-01-22 10 views
5

Qualcuno sa come aggirare questo errore? questo sql funziona bene, ma per la funzione di partizionamento 'cumulinvoiced'. Sto cercando di aggiungere un totale cumulativo, ma non sembra funzionare su viste in linea.ORA-30483: le funzioni della finestra non sono consentite qui

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

Potresti fornire un esempio dell'SQL che stai provando che non funziona e genera l'ORA-30483? –

risposta

5

L'aggregato COUNT dovrebbe essere un argomento al analitico SUM, non viceversa:

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

L'analisi e il raggruppamento non tendono a funzionare insieme. Se si esegue il primo raggruppamento quindi eseguire la query analitico contro tale risultato, penso che dovrebbe funzionare:

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

Aggregati e analisi possono funzionare insieme bene, ma gli aggregati devono essere argomenti di analisi. – Quassnoi

Problemi correlati