2010-01-22 6 views
5

Kann jemand diesen Fehler umgehen? dieser sql funktioniert gut, aber für die "cumulinvoiced" Partitionierungsfunktion. Ich versuche, eine kumulative Summe hinzuzufügen, aber es scheint nicht in Inline-Ansichten zu funktionieren.ORA-30483: Fensterfunktionen sind hier nicht erlaubt

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

Können Sie ein Beispiel für die SQL-Anweisung angeben, die nicht funktioniert und das ORA-30483 generiert? –

Antwort

5

Das Aggregat COUNT sollte ein Argument sein, um die analytischen SUM, nicht umgekehrt:

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

Analyse und Gruppierung neigen nicht dazu, zusammen zu arbeiten. Wenn Sie die Gruppierung zuerst, dann tut die analytische Abfrage dieses Ergebnis führen, ich denke, es sollte funktionieren:

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

Aggregate und Analysen können zusammen funktionieren, aber die Aggregate sollten Argumente für Analysen sein. – Quassnoi

Verwandte Themen