Net,MYSQL web Application。 我们已经创建了将返回表的存储过程,但是现在我们想要改变该过程的结构以用于显示目的。 那么如何让Mysql存储过程的TempTable结果为follwing格式? 行转换为列。如何在MYSQL tempTable结果中显示行作为列
凤凰结果输出:
Net,MYSQL web Application。 我们已经创建了将返回表的存储过程,但是现在我们想要改变该过程的结构以用于显示目的。 那么如何让Mysql存储过程的TempTable结果为follwing格式? 行转换为列。如何在MYSQL tempTable结果中显示行作为列
凤凰结果输出:
尝试
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演示
试试这个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
菲尼克斯我试过你的解决方案,但它给了我10行,因为我只需要输出2行。 –
@Phoenix:我在EDIT –
@ConstantLearner中附上输出:请参阅最新的答案。 – ankurtr
是否有在临时表中的任何其他列? – peterm
是的,我已经给TempTable列。 CREATE TEMPORARY TABLE TempTable(Current varchar(1000),One varchar(1000),thirtyOne varchar(1000),sixtyOne varchar(1000),Ninety varchar(1000))TYPE = HEAP; –