0

私は以下のように動的問合せを持っています。 @ColumnNames paramには、このピボットが使用する複数の列があります。 @IDおよび@Apartment_IDは、挿入パラメータに由来します。動的なPIVOT問合せからの未知数と列名からのINSERT INTO一時表

SET @DynamicSQL = 'select id, name, address, phone, remarks, ' + **@ColumnNames** + ' 
        from (select b.id, name, criteria_id, impact_value, remarks 
          from dbo.User u 
          inner join dbo.ID b on b.id = u.id 
          where b.Instance_ID = '+ **@Id** + 
          'and ownerID in (select * from fnSplitString(''' + **@Apartment_ID** + + ''',' + ''','''  + '))'    
       + ') as t 
       pivot (max(impact_value) for criteria_id in (' + **@ColumnNames**+') 
      ) pivoted ' 

Exec sp_executesql @DynamicSQL 

スクリーンショットに示すように結果が得られます。カラム(91、92、...)は@ColumnNamesから取得することに固定されていません。

image description here

私は並べ替え機能を作るために、一時テーブルに設定されたこのダイナミックな結果を挿入したいです。

Declare @SQLstrs nvarchar(max) 

IF OBJECT_ID('tempdb..#tempResult') IS NOT NULL 
    DROP TABLE #tempResult 

CREATE TABLE #tempResult 
( 
    id int, 
    name nvarchar(max), 
    address nvarchar(max), 
    phone nvarchar(max), 
    Remarks nvarchar(max), 
    **@ColumnNames** 
) 

--EXEC (@Alter_sql); 

SET @SQLstrs = 'Insert into #tempResult ' + @DynamicSQL 

EXEC @SQLstrs 

テンポラリテーブルに固定列を含める必要があるため、挿入する列の数を知ることができない動的列を設定するにはどうすればよいですか? *「私は並べ替え機能を作るために、一時テーブルに設定されたこのダイナミックな結果を挿入したい。」* -

+1

を使用しようか?これは私にとって[xyの問題](https://meta.stackexchange.com/q/66377/179361)と非常によく似ています。 – GarethD

+0

あなたは '#tempResult'テーブルで何をするつもりですか? –

+0

@DynamicSQL内のステートメントで注文を挿入する前に試したので、テンポラリテーブルから名前で注文したいのですが動作しませんでした。その理由は、まず、動的データをソートせずに一時テーブルに入れます。次に、テンポラリテーブルで並べ替えを行う –

答えて

1

は、この平均値が何select into

SET @SQLstrs = 'select * into #tempResult from(' + @DynamicSQL +') as _temp' 
+0

どのように前に列名について述べることができますか? –

+0

前にテーブル#tempResultを作成する必要はありません。 "select into"は自動的にテーブルを作成します – prance

+0

ありがとうございます。しかし私はこのクエリを使用しようとしますが、execの@SQLstrsは結果テーブルを表示しませんでした。私は初心者の方がどうすればいいのか教えてください。どうもありがとう。 –

関連する問題