2016-05-29 112 views
0

我有這樣的SQL:Oracle SQL - 使用分析函數對聚合函數進行分組?

SELECT 
    TO_CHAR(dateinvoiced, 'YYYY') AS year, 
    TO_CHAR(dateinvoiced, 'MM') AS month,  
    name, 
    SUM(reste) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client, 
    nameregion AS region 
FROM 
    table 
GROUP BY 
    TO_CHAR(dateinvoiced, 'YYYY'), 
    TO_CHAR(dateinvoiced, 'MM'),  
    name, 
    nameregion 
ORDER BY name; 

我得到試圖把它在GROUP BY子句中,我也得到錯誤像這樣「是不是分組功能」,使用具有和它告訴我,「窗函數試圖這裏不允許「。

找不到解決辦法?我使用的Oracle 12

+0

使用子查詢SUM(reste)OVER(PARTITION BY name,ad_org_id)FROM t – Mihai

回答

2

解析函數計算 GROUP BY/HAVING,所以通常你可以添加聚集,reste

SELECT 
    TO_CHAR(dateinvoiced, 'YYYY') AS year, 
    TO_CHAR(dateinvoiced, 'MM') AS month,  
    name, 
    SUM(SUM(reste)) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client, 
    nameregion AS region 
FROM 
    table 
GROUP BY 
    TO_CHAR(dateinvoiced, 'YYYY'), 
    TO_CHAR(dateinvoiced, 'MM'),  
    name, 
    nameregion 
ORDER BY name; 

但是這也應該由於ad_org_id而失敗,這不在GROUP BY中,也許你可以使用MIN(ad_org_id)

+0

仍然給出同樣的錯誤「ORA-00979:不是GROUP BY表達式」 –

+1

@IsmailSensei:如果使用MIN(ad_org_id) '(或將'ad_org_id'添加到GROUP BY)不會有錯誤,但我不知道這是否是您想要的。 – dnoeth

+0

問題是,我忘了ad_org_id,我沒有使用MIN,我只是將ad_org_id添加到GROUP BY。謝謝。 –