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 サイトの他の関連記事を参照してください。