ホームページ > データベース > mysql チュートリアル > 準備されたステートメントを使用して SQL のテーブルを動的に転置する方法

準備されたステートメントを使用して SQL のテーブルを動的に転置する方法

Susan Sarandon
リリース: 2025-01-06 03:58:40
オリジナル
770 人が閲覧しました

How to Dynamically Transpose a Table in SQL Using Prepared Statements?

動的 SQL を使用してテーブルを転置する方法

SQL では、テーブルを転置するには、行指向のテーブルを列指向のテーブルに変換する必要があります。これは、ユーザー概要レポートの作成など、さまざまなシナリオで役立ちます。

SQL で転置を実現する 1 つのアプローチは、CASE ステートメントを使用することです。提供された例に示すように、列 Id、UserId、FieldName、および FieldValue を持つテーブルを考えてみましょう。

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
ログイン後にコピー

このクエリは、ユーザーを UserId でグループ化し、対応するフィールド値をユーザー名、パスワード、電子メール アドレスの列。

ただし、この方法ではフィールドごとに CASE ステートメントを定義する必要があり、面倒で面倒な場合があります。柔軟性がない。これを動的にするには、MySQL のプリペアド ステートメント (動的 SQL) 構文を利用できます。

SET @sql = CONCAT("SELECT userid");
-- Dynamically create the field selection part
SET @field_list = (
  SELECT GROUP_CONCAT(
    CONCAT('MAX(CASE WHEN t.fieldname = ''', fieldname, ''' THEN t.fieldvalue ELSE NULL END) AS ', fieldname)
  )
  FROM t
  GROUP BY userid
);
SET @sql = CONCAT(@sql, ", ", @field_list);

SET @sql = CONCAT(@sql, " FROM t GROUP BY userid");
PREPARE stmt FROM @sql;
EXECUTE stmt;
ログイン後にコピー

このクエリは、サブクエリの結果を使用して動的 SQL ステートメントを構築し、フィールド選択部分を決定します。 GROUP_CONCAT 関数を使用して CASE ステートメントを連結し、動的に構築された SQL クエリが有効であることを確認します。

動的 SQL を利用することで、CASE ステートメントを手動で定義する必要がなく、柔軟性が維持され、クエリで任意の数を処理できるようになります。ユーザー定義フィールドの数。

以上が準備されたステートメントを使用して SQL のテーブルを動的に転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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