2012-03-21 23 views
0

文字列値としていくつかの行を生成する関数があります。値は次のとおりです。行を列に変換するSQL Server、T-SQL

[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と行番号の機能だけを考えました。

ご協力いただければ幸いです。

答えて

1

あなたは依然としてpivot(または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 

concatenating many rows into a single text stringの参考になります。 @PivotedListパラメーターにはおそらくそれが必要です。

私は完全にマークではないことを望みます:-)

関連する問題