mysql如何动态生成交叉表?(列是不固定的 动态生成的)
列是先算出来的 然后行列互换 
sql server中可以使用 [+字段+]
mysql中不行 那位高手帮忙指点下。

解决方案 »

  1.   

    参考下贴动态语句部分。MySQL交叉表
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/06/19/4283943.aspx
      

  2.   

    sql server中可以使用 [+字段+]
    那mysql可以concat(字段,字段,字段)
      

  3.   

    [+字段+]
    是可以用动态生成的字段做列的
    MYSQL中怎么用动态生成的做列?拷贝楼上的推荐的网上的例子做测试
    create table tx( 
     id int primary key, 
     c1 char(2), 
     c2 char(2), 
     c3 int 
    ); insert into tx values 
    (1 ,'A1','B1',9), 
    (2 ,'A2','B1',7), 
    (3 ,'A3','B1',4), 
    (4 ,'A4','B1',2), 
    (5 ,'A1','B2',2), 
    (6 ,'A2','B2',9), 
    (7 ,'A3','B2',8), 
    (8 ,'A4','B2',5), 
    (9 ,'A1','B3',1), 
    (10 ,'A2','B3',8), 
    (11 ,'A3','B3',8), 
    (12 ,'A4','B3',6), 
    (13 ,'A1','B4',8), 
    (14 ,'A2','B4',2), 
    (15 ,'A3','B4',6), 
    (16 ,'A4','B4',9), 
    (17 ,'A1','B4',3), 
    (18 ,'A2','B4',5), 
    (19 ,'A3','B4',2), 
    (20 ,'A4','B4',5); 4. 动态,适用于列不确定情况,mysql> SET @EE=''; 
    mysql> SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A;  mysql> SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
    Query OK, 0 rows affected (0.00 sec)mysql> PREPARE stmt2 FROM @QQ;
    Query OK, 0 rows affected (0.00 sec)
    Statement preparedmysql> EXECUTE stmt2;
    +--------------------+------+------+------+------+-------+
    | ifnull(c1,'total') | B1   | B2   | B3   | B4   | TOTAL |
    +--------------------+------+------+------+------+-------+
    | A1                 |    9 |    2 |    1 |   11 |    23 |
    | A2                 |    7 |    9 |    8 |    7 |    31 |
    | A3                 |    4 |    8 |    8 |    8 |    28 |
    | A4                 |    2 |    5 |    6 |   14 |    27 |
    | total              |   22 |   24 |   23 |   40 |   109 |
    +--------------------+------+------+------+------+-------+
    5 rows in set (0.00 sec)mysql>
    这个放在存储过程中报错。
      

  4.   

    我的列是动态生成的 比如说查询第一个月 第二个月
    有时候是别的月份 我查询好了之后然后做交叉表 把月份提到字段上来
    但是这个教程中都是静态的 我是想知道怎么可以是动态的。
    报错的存储过程:
    begin
    SET @EE='';  
    SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A;  
    SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
    PREPARE stmt2 FROM @QQ;
    Statement prepared;
    EXECUTE stmt2;
    end
    mysql 提示错误  1064 you have an error in your sql syntax;check the manual that corresponds to your mysql server version for the right syntax to use near 'prepared;execute stmt2;end' at line 7