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

MySQLピボットテーブル-行から列へ。クエリ

    プロシージャの作成

    CREATE PROCEDURE pivot (tablename VARCHAR(64),
                            groupname VARCHAR(64),
                            pivotname VARCHAR(64),
                            valuename VARCHAR(64))
    BEGIN
    SELECT CONCAT('CREATE VIEW to_columnslist AS\n',
                  'SELECT DISTINCT CONCAT(\'`\', `', pivotname,'`, \'` VARCHAR(255) path \\\'$."\', ', pivotname,', \'"\\\'\') line\n',
                  'FROM ', tablename)
    INTO @sql;
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
    SELECT CONCAT(
    'SELECT to_json.`', groupname,'`, parsed.*', '\n',
    'FROM (SELECT `', groupname,'`, JSON_OBJECTAGG(`', pivotname,'`, `', valuename,'`) json_data', '\n',
    '      FROM `', tablename,'`', '\n',
    '      GROUP BY `', groupname,'`) to_json', '\n',
    'CROSS JOIN JSON_TABLE( json_data,', '\n',
    '                       "$" COLUMNS ( ', 
    GROUP_CONCAT(line SEPARATOR ',\n                                     '),
    ' ) ) parsed'
    ) sql_text
    INTO @sql
    FROM to_columnslist;
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
    DROP VIEW to_columnslist;
    END
    

    使用してください。

    フィドル を参照してください。




    1. SQLServerのLIKEパターンで「単語全体の一致」を検索する

    2. SQLite LIKE

    3. nullでない場合は、他のテーブルのデータでテーブルを更新しますか?

    4. PostgreSQLの根性:「resjunk」とは何ですか?