0

文字列値としていくつかの行を生成する関数があります。値は次のとおりです。

[12*02]
[12*03]
[12*04]
[12*05]
[12*06]
[12*07]
[12*08]
[12*09]
[12*10]
[12*11]
[12*12]
[12*13]
[12*14]
[12*15]

値は実際には異なる行です。したがって、[12*01] は行 1 で、[12*02] は行 # 2 などです。これらの値を列ヘッダーとして使用したいと考えています。[12*01] は列 1、[12*02] は列 2 などです。私はピボットを使用していたでしょうが、この文字列は毎回変化し続けるので、ピボットを使用したくない理由です。これは大学の宿題ではなく、RANK 関数と行番号関数の使用しか考えていませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

1

ピボット (または Aggregate_function (CASE) のハンドコーディングされたバリアント) を使用する必要がありますが、動的に行うことができます。列ヘッダーのコンマ区切りリストを受け入れるプロシージャを作成し、リストがあるべき場所にプレースホルダーを配置する varchar 変数でピボット用の SQL コードを準備します。これにより、ピボット コードをテーブルに保存したり、ビュー定義を varchar 変数に読み取ったりして、構文チェックに役立てることができます。その後、プレースホルダーを実際のリストに置き換えて、ピボットを実行します。

create proc ExecPivot (@PivotedList nvarchar(max))
as
   set nocount on

   declare @sql nvarchar(max)
   set @sql = N'
       select ColumnList, [PLACEHOLDER]
       from TableA
       pivot 
       (
          min(Value)
          for Key in ([PLACEHOLDER])
       ) a'
   set @sql = REPLACE(@sql, '[PLACEHOLDER]', @PivotedList)
   print @sql
   exec sp_executesql @sql

多くの行を単一のテキスト文字列に連結するための優れたリファレンスがあります。おそらく @PivotedList パラメータで必要になるでしょう。

私が完全に的を射ていないことを願っています:-)

于 2012-03-21T22:05:29.157 に答える