ホームページ >データベース >mysql チュートリアル >MySQL で動的列を 0 より大きい値を持つ行に転置する方法
動的列を行に転置: 目的の変換を達成する
概要:
列からデータをアンピボットするrows はデータ操作における一般的な操作です。この記事では、0 より大きい値のみを考慮して Table_1 の動的列を転置し、目的の Expected_Result_Table を取得する方法について説明します。
MySQL の UNPIVOT 関数:
MySQL はネイティブに UNPIVOT を提供しません。関数。ただし、次の方法を使用すると、望ましい結果を達成できます:
静的列ベースのアプローチ:
限られた数の静的列については、一連の UNION を使用できます。転置テーブルを作成するための ALL ステートメント。各ステートメントは、Word および Qty として特定の列を選択します。このアプローチは、既知の列数を持つ静的スキーマに適しています。
動的列ベースのアプローチ:
列数が不明な動的スキーマの場合、より洗練されたアプローチは次のとおりです。必須。準備されたステートメントを使用して、列をピボットする動的 SQL を生成できます。これには、各列の UNION ALL ステートメントを動的に作成することが含まれます。
動的列の例:
提供された MySQL クエリは、動的アプローチを使用して Table_1 の列を転置する方法を示しています。
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'select id, ''', c.column_name, ''' as word, ', c.column_name, ' as qty from yt where ', c.column_name, ' > 0' ) SEPARATOR ' UNION ALL ' ) INTO @sql FROM information_schema.columns c where c.table_name = 'yt' and c.column_name not in ('id') order by c.ordinal_position; SET @sql = CONCAT('select id, word, qty from (', @sql, ') x order by id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
結論:
を使用することで静的アプローチでも動的アプローチでも、0 より大きい値のみを考慮して MySQL の動的カラムを効果的に転置して、Expected_Result_Table で表される目的の行ベースの構造を取得できます。
以上がMySQL で動的列を 0 より大きい値を持つ行に転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。