ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で不明な列を含むデータを動的にピボットする方法

SQL Server 2005 で不明な列を含むデータを動的にピボットする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 09:46:43789ブラウズ

How to Dynamically Pivot Data with Unknown Columns in SQL Server 2005?

SQL Server 2005 動的ピボット

SQL Server 2005 では、列数が不明な場合のピボット操作は難しい場合があります。この記事では、そのような問題の解決策を検討します。

質問:

SQL Server 2005 で列数が不明なデータを動的にピボットするにはどうすればよいですか?目的の出力は、一意の生徒を行とし、動的列が課題を表し、期日順に並べ替えられた表のようになります。可能であれば、「合計」列は最後に表示する必要があります。

答え:

SQL Server 2005 の制限により、動的ピボットを実装するには動的 SQL を使用する必要がある場合があります。考えられる解決策の 1 つは、動的管理ビュー (DMV) と XML を利用して動的 SQL ステートメントを生成することです。

<code class="language-sql">DECLARE @DynamicSQL NVARCHAR(MAX) = N'';

-- 从表中获取不同的作业名称
SELECT DISTINCT AssignmentName
INTO #AssignmentNames
FROM TableName;

-- 循环遍历作业名称
SELECT @DynamicSQL = @DynamicSQL + '
  MAX(CASE WHEN AssignmentName = ''' + AssignmentName + ''' THEN Grade END) AS ' + AssignmentName + ','

FROM #AssignmentNames;

-- 删除动态 SQL 语句末尾的逗号
SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 1);

-- 构造用于透视的最终动态 SQL 语句
SET @DynamicSQL = 'SELECT StudentName, ' + @DynamicSQL + '
  FROM TableName
  GROUP BY StudentName;';

-- 执行动态 SQL 语句
EXEC sp_executesql @DynamicSQL;</code>

このメソッドは、テーブル内で識別されたさまざまなジョブ名に基づいてピボットするために必要な列を含む動的 SQL ステートメントを生成します。

注:

このソリューションには動的 SQL が含まれていますが、SQL ステートメントは既知の信頼できるデータから構築されているため、インジェクション攻撃に対して脆弱ではありません。あるいは、データが頻繁に変更される場合は、コード生成を実装して、必要な SQL ステートメントを含むストアド プロシージャを作成することを検討してください。

以上がSQL Server 2005 で不明な列を含むデータを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。