ホームページ > データベース > mysql チュートリアル > 動的に生成された列を含む SQL テーブルを転置するにはどうすればよいですか?

動的に生成された列を含む SQL テーブルを転置するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-05 05:03:41
オリジナル
530 人が閲覧しました

How to Transpose a SQL Table with Dynamically Generated Columns?

SQL テーブルの転置: 柔軟なデータ変換の実現

SQL の転置操作には、行から列への変換、またはその逆の変換が含まれます。これに関連して、ユーザー定義のフィールド名を持つテーブルをユーザー固有のデータに転置する問題に取り組んでみましょう。

問題:

user- を持つテーブルが与えられた場合定義されたフィールド名と対応する値。目標は、各ユーザーのデータが単一の行に表示され、列名がフィールドを表す形式に転置することです。 names.

例:

入力テーブル:

Id UserId FieldName FieldValue
1 100 Username John Doe
2 100 Password pass123!
3 102 Username Jane
4 102 Password $ecret
5 102 Email Address [email protected]

必要な出力:

UserId Username Password Email Address
100 John Doe pass123! NULL
102 Jane $ecret [email protected]

ソリューションMySQL 内 (ANSI なし)構文):

MySQL は ANSI PIVOT/UNPIVOT 構文をサポートしていないため、条件付き集計アプローチを使用できます。

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 TABLE t
GROUP BY t.userid
ログイン後にコピー

このアプローチは各行を反復処理し、CASE ステートメントを使用します。フィールド名に基づいて、目的の出力列に値を割り当てます。次に、各 userId の結果を集計します。

プリペアド ステートメントを使用した動的ソリューション:

ソリューションをより多用途にするために、MySQL のプリペアド ステートメント構文を使用できます。フィールドを動的に指定します:

SET @query = "SELECT userid, ";
SET @enum_query = "";
SELECT CONCAT(@enum_query, "MAX(CASE WHEN fieldname = '", fieldname, "' THEN fieldvalue ELSE NULL END) AS ", fieldname,", ")
INTO @enum_query
FROM (
    SELECT DISTINCT fieldname
    FROM TABLE
) AS subquery;
SET @enum_query = SUBSTRING(@enum_query, 1, LENGTH(@enum_query) - 2);
SET @query = CONCAT(@query, @enum_query, " FROM TABLE GROUP BY userid;");
PREPARE stmt FROM @query;
EXECUTE stmt;
ログイン後にコピー

このアプローチでは、動的必要なフィールド名をすべて出力の列として含むクエリ。

以上が動的に生成された列を含む SQL テーブルを転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート