sql >> データベース >  >> RDS >> Mysql

MYSQLで列を行に変換する必要があります

    以下の解決策は、問題を解決するのに役立つ可能性があります。テーブル構造に従っていくつかの変更を行う必要があります。

    このソリューションでは、ストアドプロシージャを作成する必要があります。

    これがテーブル構造の場合:

    CREATE TABLE `school` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(500) DEFAULT NULL,
      `value` varchar(45) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    SET FOREIGN_KEY_CHECKS=1;
    

    上記がテーブル構造である場合、以下のソリューションが機能しています。

       SET SESSION group_concat_max_len = (2056 * 2056);
    
    SET @sql = NULL;
    
    SELECT GROUP_CONCAT(DISTINCT
                 CONCAT(
                   'MAX(CASE WHEN school.name ="',m.name,'"'
                                    ' THEN school.value END)"',m.name , '"'))
                                    INTO @sql  
                                                from school as m;
    
    SET @sql = CONCAT('SELECT value,',@sql,
                      ' FROM school');
    
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    テーブル構造に従って変更を行います。

    このソリューションは、複数のテーブルにも役立ちます。これが問題の解決に役立つことを願っています。




    1. com.mysql.jdbc.MysqlDataTruncation:データの切り捨て:データが列'column_name'に対して長すぎます

    2. GentooでのMySQLリレーショナルデータベースの使用

    3. 1つのクエリで2つのテーブルにOracleINSERTを実行

    4. SQLiteDiskIOExceptionエラーコード10:ディスクI/Oエラー