0

SQLサーバーで動作します。1つの重要なSQLを記述します。以下は、私のテーブルと重要なSQL構文です。私の問題は、この重要な値をTempテーブルに配置できませんでした。

-----------------Table-1-------------
CREATE TABLE Table1 (ColId INT,ColName VARCHAR(10))
INSERT INTO Table1 VALUES(1, 'Country')
INSERT INTO Table1 VALUES(2, 'MONTH')
INSERT INTO Table1 VALUES(3, 'Day')



----------------Table-2----------------------------

CREATE TABLE Table2 (tID INT,ColID INT,Txt VARCHAR(10))

INSERT INTO Table2 VALUES (1,1, 'US')
INSERT INTO Table2 VALUES (1,2, 'July')
INSERT INTO Table2 VALUES (1,3, '4')
INSERT INTO Table2 VALUES (2,1, 'US')
INSERT INTO Table2 VALUES (2,2, 'Sep')
INSERT INTO Table2 VALUES (2,3, '11')
INSERT INTO Table2 VALUES (3,1, 'US')
INSERT INTO Table2 VALUES (3,2, 'Dec')
INSERT INTO Table2 VALUES (3,3, '25')


--------------
----------------Pivotal sql----------------------------

DECLARE @query NVARCHAR(4000)
DECLARE @cols NVARCHAR(2000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + t2.ColName
                        FROM    Table1 AS t2
                        ORDER BY '],[' + t2.ColName
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'                    

SET @query = N'SELECT tID, '+
@cols +'
FROM
(SELECT  t2.tID
      , t1.ColName
      , t2.Txt 
FROM    Table1 AS t1
        JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p
PIVOT
(
MAX([Txt])
FOR ColName IN
( '+
@cols +' )
) AS pvt
ORDER BY tID;'
EXECUTE(@query)

以下のコマンドを実行した後、残りの作業にこの値を使用したいので、このコマンドの結果値を一時テーブルに入れる必要があります

 EXECUTE(@query)
4

2 に答える 2

0

これを試して :

Declare @Sample table
(
 tID int,
 Country VARCHAR(10),
 Day int ,
 MONTH  VARCHAR(10)
)

Insert into @Sample 
EXECUTE(@query)

select * from @Sample

同じように、のtemp table代わりに作成table variableして挿入することができます

于 2013-01-17T06:50:30.403 に答える
0

EXECUTE(@Querys)を使用して残りの手順を実行できる場合は、そのようなことを行うことができます。

Declare @TabName Varchar(40)

Select @TabName='##'+Replace(CAST(NEWID() as Varchar(40)),'-','')

DECLARE @query NVARCHAR(4000)
DECLARE @cols NVARCHAR(2000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + t2.ColName
                        FROM    Table1 AS t2
                        ORDER BY '],[' + t2.ColName
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'                    

SET @query = N'SELECT tID, '+
@cols +' into ' +@TabName + '
FROM
(SELECT  t2.tID
      , t1.ColName
      , t2.Txt 
FROM    Table1 AS t1
        JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p
PIVOT
(
MAX([Txt])
FOR ColName IN
( '+
@cols +' )
) AS pvt
ORDER BY tID;'

Print @Query
EXECUTE(@query)

Select @query = 'Select * from ' + @Tabname
EXECUTE(@query)

Select @query = 'Drop Table ' + @Tabname
EXECUTE(@query)

それをしたくない場合は、「ハード」## temptableを使用できますが、マルチユーザー環境ではこの保存を使用できません。

于 2013-01-17T06:58:24.440 に答える