id f1 f2
1 a aa
2 b bb
3 b bbb
4 c cc合并为a    b        c
aa   bb,bbb   cc不知能不能实现,请高手赐教

解决方案 »

  1.   

    select group_concat(DISTINCT f1) from tt
    union
    select group_concat(DISTINCT f2) from tt
      

  2.   

    Select f1,group_concat(f2) from表 group by f1;
      

  3.   

    DELIMITER $$DROP PROCEDURE IF EXISTS `dt`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `dt`()
    BEGIN
    DECLARE done INT DEFAULT 0;
      DECLARE a1 VARCHAR(10);
      DECLARE a2 VARCHAR(100);
      DECLARE cur1 CURSOR FOR SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur1;
    SET @ee='';
           FETCH cur1 INTO a1,a2;
           WHILE done=0 DO
    SET @ee:=CONCAT(@ee,'max(if(f1=\'',a1,'\',dd,\'\'',')) as ',a1,',');
    FETCH cur1 INTO a1,a2;
    END WHILE;
    SELECT @ee;
    SET @ee=CONCAT('select f1,',LEFT(@ee,LENGTH(@ee)-1),' from (SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1) a ');
    SELECT @ee;
    PREPARE stmt1 FROM @ee;
                  EXECUTE stmt1 ;
                  DEALLOCATE PREPARE stmt1;
    END$$DELIMITER ;
      

  4.   

    1楼的结果是group_concat(DISTINCT f1)
    a,b,c
    aa,bb,bbb,cc
    2楼的结果是f1     group_concat(f2)
    a      aa
    b      bb,bbb
    c      cc都不是想要的结果
      

  5.   

    SET @ee=CONCAT('select f1,',LEFT(@ee,LENGTH(@ee)-1),' from (SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1) a ');->
    SET @ee=CONCAT('select ',LEFT(@ee,LENGTH(@ee)-1),' from (SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1) a ');
      

  6.   

    DELIMITER $$DROP PROCEDURE IF EXISTS `dt`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `dt`()
    BEGIN
    DECLARE done INT DEFAULT 0;
      DECLARE a1 VARCHAR(10);
      DECLARE a2 VARCHAR(100);
      DECLARE cur1 CURSOR FOR SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur1;
    SET @ee='';
           FETCH cur1 INTO a1,a2;
           WHILE done=0 DO
    SET @ee:=CONCAT(@ee,'max(if(f1=\'',a1,'\',dd,\'\'',')) as ',a1,',');
    FETCH cur1 INTO a1,a2;
    END WHILE;
    SET @ee=CONCAT('select ',LEFT(@ee,LENGTH(@ee)-1),' from (SELECT f1,GROUP_CONCAT(f2) AS dd FROM ttp GROUP BY f1) a ');
    PREPARE stmt1 FROM @ee;
                  EXECUTE stmt1 ;
                  DEALLOCATE PREPARE stmt1;
    END$$DELIMITER ;
      

  7.   

    如果你需要转置结果的话,则参考下贴中的多种方法。http://blog.csdn.net/acmain_chm/article/details/4283943
     MySQL交叉表
      

  8.   

    谢谢两位,ACMAIN_CHM 最后给出的方法也很棒!