ホームページ > データベース > mysql チュートリアル > ピボット クエリを使用して SQL で行を列に転置するにはどうすればよいですか?

ピボット クエリを使用して SQL で行を列に転置するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-03 04:25:42
オリジナル
822 人が閲覧しました

How Can I Transpose Rows into Columns in SQL Using a Pivot Query?

SQL 行を列として転置する: ピボットされたソリューション

SQL では、行を列として転置することは、表形式データを再形成するための便利な手法です。データ ポイントを表す行と変数を表す列を含むテーブルがある場合、データの方向を切り替える必要があるシナリオが発生する可能性があります。

そのようなシナリオの 1 つは、質問で説明されているように、応答と質問を含むテーブルが含まれます。 。目標は、回答データを列形式に転置することです。各質問が 1 つの列になり、その質問に対する各ユーザーの回答が対応する行に表示されます。

この転置を実現するには、既知の手法を利用できます。 「ピボットクエリ」として。次の SQL ステートメントは、PostgresSQL を使用したソリューションを示しています。

SELECT r.user_id,
       MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?",
       MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?",
       MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?"
FROM RESPONSES r
JOIN QUESTIONS q ON q.id = r.question_id
GROUP BY r.user_id
ログイン後にコピー

このクエリは、条件付き集計を使用して、質問 ID に基づいて応答値をグループ化し、集計します。 CASE ステートメントは、各質問の回答を抽出し、特定の列に割り当てます。 MAX() 関数は、各質問とユーザーのペアの最新の回答のみが含まれるようにするために使用されます。

このクエリの出力は、目的の転置形式に似ており、各ユーザーの ID が最初のリストに表示されます。列の後に、ユーザーの回答 (回答が存在しない場合は NULL) を含む各質問の列が続きます。

このピボット クエリは、行を列として転置するための標準的なアプローチです。 SQL。任意の数の質問と回答の組み合わせを動的に処理するための効率的かつ柔軟なソリューションを提供します。

以上がピボット クエリを使用して SQL で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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