2013-01-17 62 views
0

工作在sql server上。寫一個關鍵sql,bellow是我的表和關鍵sql語法。我的問題是沒能把這個關鍵值放在Temp表中。方式把pivote sql結果放到temptable

-----------------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) 

回答

0

如果你能夠用EXECUTE(@Querys)工作做你的程序的其他部分,你coud做這樣的

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 ' [email protected] + ' 
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) 

的東西,如果你不想這樣做,你可以使用一個「硬」 ##可以使用,但是你不能在多用戶環境下使用這種保存方式。

+0

bummi感謝您的回覆,但這是一個多用戶環境問題,因此無法使用全局# #temp表 – shamim

+0

@shamim多數民衆贊成這就是爲什麼我從NEWID創建表名,這將強制您以相同的方式執行該過程的其餘部分。填充查詢並執行它。 – bummi

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並將其插入它

+0

praveen感謝您的回覆,有一個問題,我無法創建臨時表,因爲我的Table1列增加很快,所以我需要更改此腳本爲您定義的臨時表,手動。這對我來說是一個大問題。幫助插入值在其列動態增長的臨時動態表中 – shamim

+0

如果是這種情況,那麼我發現你需要再次更改動態查詢,如果列數發生變化 – praveen