2013-06-04 38 views
0

Net,MYSQL web Application。 我们已经创建了将返回表的存储过程,但是现在我们想要改变该过程的结构以用于显示目的。 那么如何让Mysql存储过程的TempTable结果为follwing格式? 行转换为列。如何在MYSQL tempTable结果中显示行作为列

enter image description here

凤凰结果输出:

enter image description here

+0

是否有在临时表中的任何其他列? – peterm

+0

是的,我已经给TempTable列。 CREATE TEMPORARY TABLE TempTable(Current varchar(1000),One varchar(1000),thirtyOne varchar(1000),sixtyOne varchar(1000),Ninety varchar(1000))TYPE = HEAP; –

回答

1

尝试

SELECT 
     SUM(CASE WHEN Agedreceivable='Current' THEN AgedreceivableAmt END) Current, 
     SUM(CASE WHEN Agedreceivable='1-30' THEN AgedreceivableAmt END) '1-30', 
     SUM(CASE WHEN Agedreceivable='31-60' THEN AgedreceivableAmt END) '31-60', 
     SUM(CASE WHEN Agedreceivable='61-90' THEN AgedreceivableAmt END) '61-90', 
     SUM(CASE WHEN Agedreceivable='>90' THEN AgedreceivableAmt END) '>90' 
    FROM 
(
    SELECT @n := @n + 1 rownum, agedreceivable, agedreceivableamt 
    FROM temp, (SELECT @n := 0) z 
) y 
GROUP BY FLOOR((rownum - 1)/5) 

输出:

| CURRENT | 1-30 | 31-60 | 61-90 | >90 | 
---------------------------------------- 
|  0 | 0 |  0 |  0 | 0 | 
| 12993 | 0 |  0 |  0 | 0 | 

下面是SQLFiddle演示

+0

不错的解决方案。 :) – ankurtr

+0

@ConstantLearner不客气:) – peterm

1

试试这个SQL

select max((CASE WHEN Agedreceivable='Current' then AgedeceivableAmt ELSE 0 END)) as Current, 
max((CASE WHEN Agedreceivable='1-30' then AgedeceivableAmt ELSE 0 END)) as '1-30', 
max((CASE WHEN Agedreceivable='31-60' then AgedeceivableAmt ELSE 0 END)) as '31-60', 
max((CASE WHEN Agedreceivable='61-90' then AgedeceivableAmt ELSE 0 END)) as '61-90', 
max((CASE WHEN Agedreceivable='>90' then AgedeceivableAmt ELSE 0 END)) as '>90' 
from yourtable; 

由于您没有提到你的entite表的详细信息,我建议以组这个纪录被一些适当的领域,你会得到所需的输出,否则你可以按照@ peterm的解决方案。

样本小提琴FIDDLE

+0

菲尼克斯我试过你的解决方案,但它给了我10行,因为我只需要输出2行。 –

+0

@Phoenix:我在EDIT –

+0

@ConstantLearner中附上输出:请参阅最新的答案。 – ankurtr