首页 > 新闻系统 > 编程天地 > 文章正文

MySQL动态行转列的实现方法

2008-04-21 16:05:58 来源:中国自学编程网 作者:佚名 点击:
网上的都是一些静态的,用CASE WHEN结构实现。所以我写了一个动态的。

   set @stmt3 = concat(’select ’,@temp,’ from ’,$schema_name,’.’

 

,$table_name,’ limit ’,j,’,1 into @temp2;’);
      prepare s3 from @stmt3;
      execute s3;
      set str = concat(str,’"’,@temp2,’"’,’,’);
      deallocate prepare s3;
      set @stmt3 = ’’;
      set j = j+1;
    end loop loop3;
    set str = left(str,length(str)-1);
    -- insert new data into table
    set @stmt4 = concat(’insert into test.temp’,str,’;’);
    prepare s4 from @stmt4;
    execute s4;
    deallocate prepare s4;
    set @stmt4 = ’’;
    set s=s+1;
  end loop loop2;
END$$

DELIMITER ;



以下是测试结果:
======
select * from a;
select * from b;
select * from salary;

call sp_row_column_wrap(’test’,’a’);
select * from test.temp;
call sp_row_column_wrap(’test’,’b’);
select * from test.temp;
call sp_row_column_wrap(’test’,’salary’);
select * from test.temp;



query result(2 records)
aid title 
1 111 
2 222 


query result(3 records)
bid aid image time 
1 2 1.gif 2007-08-08 
2 2 2.gif 2007-08-09 
3 2 3.gif 2007-08-08 


query result(7 records)
id cost des Autoid 
1 10 aaaa 1 
1 15 bbbb 2 
1 20 cccc 3 
2 80 aaaa 4 
2 100 bbbb 5 
2 60 dddd 6 
3 500 dddd 7 


query result(2 records)
1 2 
1 2 
111 222 


query result(4 records)
1 2 3 
1 2 3 
2 2 2 
1.gif 2.gif 3.gif 
2007-08-08 2007-08-09 2007-08-08 



query result(4 records)
1 2 3 4 5 6 7 
1 1 1 2 2 2 3 
10 15 20 80 100 60 500 
aaaa bbbb cccc aaaa bbbb dddd dddd 
1 2 3 4 5 6 7  

9 7 3 1 2 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203