2013-10-04 27 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。这有助于得到我需要的总结。 –