0
大家好,我還是比較新的SQL,並且在線搜索還沒有提供給我一個解決方案(或者它在我面前,但離開我的知識領域:/) 。所以希望在這裏試試我的運氣謝謝!使用Pivot SQL的動態列名稱
Table: Servers
Columns: ServerUrl ServerName
Rows: //server0001/space0/ Telescope1
//server0001/space1/ Space
//server0001/space2/ Planet
Table: Projects
Columns: ServerUrl Name Entity Type
Rows: //server0001/space0/ Field1 E T1
//server0001/space1/ Field2 T T1
//server0001/space2/ Field3 E T3
隨着存儲過程下面我能夠將數據作爲返回:
所以SERVERURL被用作如下所示的列名,但我希望它是在服務器名稱代替。我知道有可能將列設置爲ServerNames,但是我將如何動態進行此操作,因爲ServerUrl可能會更改。
--- Returned Data Begin ---
Stored Procedure Results:
Columns: Name Entity //server0001/space0/ ...space1 ...space2
Rows: Field1 E T1 NULL NULL
Field2 T NULL T2 NULL
Field3 E NULL NULL T3
--- Returned Data End ---
***存儲過程下用於獲得上述結果
--- STORED PROCEDURE BEGIN ---
DECLARE @Projects varchar(max)
SELECT @ProgramList = COALESCE(@Projects + '], [', '') + ServerURL FROM
Servers ORDER BY ServerURL
SET @ProgramList = CONCAT ('[', @ProgramList + ']')
DECLARE @sql nvarchar(max)
SET @sql = 'select * from (select P.Name, P.Entity, P.Field, P.ServerUrl
FROM ProjectFields as P) as P pivot (min(P.Field) for P.ServerUrl in (' +
@Projects + ')) as PIV ORDER BY Name'
EXEC sp_executesql @sql1
--- STORED PROCEDURE END ---
謝謝:)
將@ProgramList選擇更改爲ServerName inste並將您的動態語句更改爲「SELECT * FROM(SELECT P.Name,P.Entity,P.Field,S.ServerName FROM ProjectFields AS P JOIN Servers AS S S.ServerURL = P. ServerURL)AS P PIVOT(MIN(Field)FOR ServerName IN('+ @ProgramList +'))作爲PIV ORDER BY PIV.Name;'' – ZLK