ホームページ >データベース >mysql チュートリアル >動的に生成されたユーザー定義の列名を持つ SQL テーブル データを転置するにはどうすればよいですか?
ユーザー定義のフィールド名を使用した SQL テーブル データの転置
データのピボットまたは転置には、列が属性を表すテーブルの変換が含まれます。行はエンティティ データを表し、行は属性を表し、列はエンティティ データを表します。これは、提供されているテーブルの例に見られるように、ユーザー定義のフィールド名を操作するときに便利です。
転置テーブルのクエリ
指定されたテーブルを転置するには、次のようにします。次に示すように、SQL 関数と条件ステートメントを組み合わせて使用できます。以下:
SELECT t.UserId, MAX(CASE WHEN t.FieldName = 'Username' THEN t.FieldValue ELSE NULL END) AS Username, MAX(CASE WHEN t.FieldName = 'Password' THEN t.FieldValue ELSE NULL END) AS Password, MAX(CASE WHEN t.FieldName = 'Email Address' THEN t.FieldValue ELSE NULL END) AS Email FROM t GROUP BY t.UserId
説明
準備されたステートメントを使用した動的クエリ
フィールド名の動的なリストを処理するには、MySQL の Prepared Statement を利用できます。 (動的 SQL) 構文:
SET @sql = 'SELECT UserId, '; SELECT GROUP_CONCAT(CONCAT('MAX(CASE WHEN FieldName = ''', FieldName, ''' THEN FieldValue ELSE NULL END) AS ', FieldName)) INTO @sql FROM (SELECT DISTINCT FieldName FROM t); SET @sql = CONCAT(@sql, ' FROM t GROUP BY UserId'); PREPARE stmt FROM @sql; EXECUTE stmt;
このクエリは、テーブル内の個別のフィールド名に基づいて SQL ステートメントを動的に構築し、準備されたステートメントを使用して実行します。
以上が動的に生成されたユーザー定義の列名を持つ SQL テーブル データを転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。