2013-10-04 50 views
0

我有個任務編寫SQL來總結出如下數據:從一組數據中創建多個字段的彙總報告

select 
payment, 
status, 
interest, 
principal 
from payment 

payment status interest principal 
1  A  100   0 
2  r  0   500 
3  o  0   400 
4  d  0   100 
5  A  0   200 
6  A  200   0 
7  A  300   0 
8  A  0   300 
  • 與利息支付會如果利息不爲0
  • 與本金有關的付款將是本金不爲0的地方
  • 需要拆分數據進入型

我找的結果與此類似:

    Interest total count   principal total count 
Status - A    3       1 
Other     0       4 
total of all payments 3       5 

我一直在使用組功能,但一直沒能超越利息金額集團。任何建議將不勝感激。

+0

你能否澄清如何示例數據應該在數據透視表來概括?例如,您的示例數據有5條記錄,狀態= A。如果我們在「利息總數」和「本金總數」下添加值,那麼這不應該等於您的「狀態-A」行總數爲5 – AgRizzo

+0

A的狀態表示已批准的付款次數,尚未批准。最終,我將使用這些數據來計算Ireport中已批准支付的總額百分比。例如。本金將相當於全部本金的20%。目前,我已經能夠在ireport中計算這些支付,但在產生包含所有利息和本金支付的結果時,表現非常緩慢。 –

回答

0

爲此,我建議使用GROUP BY + WITH ROLLUP。喜歡的東西:

SELECT 
    IF(`status` = 'A', 'Status A', 'Others') as `-`, 
    SUM(`interest` > 0) as `Interest total count`, 
    SUM(`principal` > 0) as `principal total count` 
FROM 
    (
     SELECT 1 as `payment`, 'A' as `status`, 100 as `interest`, 0 as `principal` 
     UNION ALL 
     SELECT 2, 'r', 0, 500 
     UNION ALL 
     SELECT 3, 'o', 0, 400 
     UNION ALL 
     SELECT 4, 'd', 0, 100 
     UNION ALL 
     SELECT 5, 'A', 0, 200 
     UNION ALL 
     SELECT 6, 'A', 200, 0 
     UNION ALL 
     SELECT 7, 'A', 300, 0 
     UNION ALL 
     SELECT 8, 'A', 0, 300 
    ) as `sub` 
GROUP BY 1 WITH ROLLUP; 

結果:

-  Interest total count principal total count 
Others   0      3 
Status A  3      2 
       3      5 

查詢:

SELECT 
    IF(`status` = 'A', 'Status A', 'Others') as `-`, 
    SUM(`interest` > 0) as `Interest total count`, 
    SUM(`principal` > 0) as `principal total count` 
FROM 
    `payment` 
GROUP BY 1 WITH ROLLUP; 
+0

謝謝!我會通過彙總查看組,看看是否可以實現所需的結果。 –

+0

@ThucNguyen如果StackOverflow上的任何答案有助於解決您的問題,那麼請考慮放棄它,或者檢查解決方案。樂意效勞。乾杯。 – BlitZ

+0

謝謝@CORRUPT。這有助於得到我需要的總結。 –