1

このSQLクエリを使用しています

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Animal2) 
                    from animals
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT Animal1, ' + @cols + ' from 
             (
                select animal1, animal2, Corelation
                from animals
            ) x
            pivot 
            (
                min(Corelation)
                for animal2 in (' + @cols + ')
            ) p '

execute(@query)

デモ付きのSQLフィドルを参照してください

クエリを実行すると、戻り値としてテーブルが表示されます。

そのテーブルからどのように選択できますか?使ってみましSELECT * FROM (*past here the script*)たがうまくいきませんでした。execute(@query)の結果をテーブルとして使用し、そこから選択する必要があります(新しいテーブルに配置するため)。どうすればいいですか?

ありがとう

注:そのクエリは、このSOの質問に対する回答でした

4

2 に答える 2

3

Insert into ... exec次のような形式を使用します。

CREATE TABLE #tmp1 (
   [Animal1] varchar(5), 
   [Cat] decimal(10, 5), 
   [Dog] decimal(10, 5), 
   [Mouse] decimal(10, 5)
)

Insert Into #Tmp1
 execute(@query)  

select * from #tmp1
  where cat = 1

もちろん、列名は動的であるため、createステートメントも動的SQLにシフトする必要があります。

修正バージョンのSQLフィドル

動的バージョンのSQLフィドル

于 2012-10-30T09:36:02.630 に答える
2

とグローバル一時テーブルを使用intoします。その場合、事前にテーブル列を定義する必要はありません。

set @query = 'SELECT Animal1, ' + @cols + 
    +' into ##temp '
    +' from 
             (
                select animal1, animal2, Corelation
                from animals
            ) x
            pivot 
            (
                min(Corelation)
                for animal2 in (' + @cols + ')
            ) p '

select * from ##temp
于 2012-10-30T09:40:31.933 に答える