2012-05-17 22 views
0

我有一個表ZXC聚集了幾行顯示在Oracle

select NAME, MONTH, YEAR, DEPT, MONTHVAL, YEARVAL from ZXC 

MONTHVAL有一定的價值。我想根據名稱,部門和月份的組合彙總一些行,並在YEARVAL列中顯示彙總值。

例如,如果我有表

Name Month Year Dept Monthval Yearval 

BLAKE Jan 2011 100 124.542 0 
KING Feb 2011 200 234.542 0 
KING Jan 2011 200 27764.464 0 
BLAKE March 2011 100 0   0 
BLAKE Feb 2011 400 0   0 
SCOTT Jan 2011 500 24564.464 0 
KING March 2011 200 1265.542 0 
KING April 2011 200 1065.542 0 

的話,我想看到的結果作爲

Name Month Year Dept Monthval Yearval 

BLAKE Jan 2011 100 124.542 124.542 
KING Jan 2011 200 27764.464 27764.464 
SCOTT Jan 2011 500 24564.464 24564.464 
KING Feb 2011 200 234.542 27999.006 
BLAKE Feb 2011 100 0   124.542 
KING March 2011 200 1265.542 29264.548 
BLAKE March 2011 100 0   124.542 
KING April 2011 200 1065.542 30330.09 

回答

1

這個怎麼樣:

SELECT name 
    , dept 
    , year 
    , SUM(monthval) yearval 
FROM zxc 
GROUP BY name 
     , dept 
     , year; 

這將產生一個總每年的每月價值。我不確定這是否是您需要的 ,但看起來對我而言。

您可以使用ROLLUP()CUBE()函數(多級聚合)中的GROUP BY函數使其更具發展色彩。

0

聽起來像:

select NAME, 
     MONTH, 
     YEAR, 
     DEPT, 
     MONTHVAL, 
     SUM(MONTHVAL) OVER (PARTITION BY YEAR) YEARVAL 
    from ZXC 
0

根據您的輸出,它看起來像你想爲每個人總運行。基本上,下面的查詢顯示了這個通用的解決方案:

SELECT 
    Name, 
    Month, 
    Year, 
    Dept, 
    Monthval, 
    SUM(Monthval) OVER (PARTITION BY Name, Dept ORDER BY Year, Month) AS Yearval 
FROM ZXC 

但也有可能是由Month是一個問題的排序,因爲幾個月似乎被存儲爲名稱在你的表,而不是數字。然後我會改變如上這樣:

SELECT 
    Name, 
    Month, 
    Year, 
    Dept, 
    Monthval, 
    SUM(Monthval) OVER (
    PARTITION BY Name, Dept 
    ORDER BY TO_DATE(Year || '-' || SUBSTR(Month, 1, 3), '-01', 'YYYY-MON-DD') 
) AS Yearval 
FROM ZXC