2015-04-21 82 views
0

利潤表表損益表具有結構:如何彙總行添加到PostgreSQL的

sgroup char(30), 
account char(10), 
jan numeric(12,2), 
feb numeric(12,2) 

並具有價值:

SGroup Account Jan  Feb 

Sales 311  100  200 
Sales 312  20  30 
.. 
Other 410  3333  44 
Other 411  333  344 
... 

如何轉換這個表格有標題和小計爲每個組:

Caption  Jan  Feb 

Sales 
311   100  200 
312   20  30 
Sales Total 120  230 

Other 
410   3333  44 
411   333 344 
Other total 3666 388 
...   ...  ... 
Grand Total ...  ... 

標題欄應包含組標題,每個組的帳號和組總數。 總計應該有空行。 之後,應該有下一組等。 最後應該有一個「總計」行包含所有行的總和。

在Debian中使用Postgres 9.1.2。
在Debian中運行的Mono C#ASP.NET MVC應用程序。如果更合理,這個轉換也可以在MVC控制器中完成。

回答

1

我會計算每組總和的CTE使用它三次在主查詢:

WITH total AS (
    SELECT sgroup, 'Sales Total'::text AS c, sum(jan) AS j, sum(feb) AS f 
    FROM income_statement 
    GROUP BY 1 
    ) 
( -- parens required 
SELECT caption, jan, feb 
FROM (
    SELECT 1 AS rnk, sgroup, account::text AS caption, jan, feb 
    FROM income_statement 

    UNION ALL 
    SELECT 0 AS rnk, sgroup, sgroup::text, NULL, NULL FROM total 

    UNION ALL 
    SELECT 2 AS rnk, * FROM total 
    ) sub 
ORDER BY sgroup, rnk 
) 
UNION ALL 
SELECT 'Grand Total', sum(j), sum(f) FROM total; 

的額外的括號需要包括ORDER BY

你可能要使用的數據類型​​:

+0

優秀。非常感謝你。 – Andrus