也许是这样的:
首先是一些测试数据:
CREATE TABLE tblTempValues
(
EMPID VARCHAR(100),
ENAME VARCHAR(100),
SALARY INT,
DEPARTMENT VARCHAR(100)
)
INSERT INTO tblTempValues
VALUES
('01','TEST1',2000,'A/C'),
('02','TEST2',3000,'SALES')
将得到列PIVOT
上。我用EMPID
的ROW_NUMBER
在:
DECLARE @cols VARCHAR(MAX)
;WITH CTE
AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY tblTempValues.EMPID) AS RowNbr
FROM
tblTempValues
)
SELECT
@cols=COALESCE(@cols +','+QUOTENAME(RowNbr),QUOTENAME(RowNbr))
FROM
CTE
然后做一个动态的支点这样。该orderWeight
,这样你将有列的顺序:
DECLARE @query NVARCHAR(4000)=
N';WITH CTE
AS
(
SELECT ''EMPID'' AS ID, CAST(EMPID AS VARCHAR(MAX)) AS Value, ROW_NUMBER() OVER(ORDER BY EMPID) AS RowId,1 as orderWeight FROM tblTempValues UNION ALL
SELECT ''ENAME'' AS ID, CAST(ENAME AS VARCHAR(MAX)) AS Value, ROW_NUMBER() OVER(ORDER BY EMPID) AS RowId,2 as orderWeight FROM tblTempValues UNION ALL
SELECT ''SALARY'' AS ID, CAST(SALARY AS VARCHAR(MAX)) AS Value, ROW_NUMBER() OVER(ORDER BY EMPID) AS RowId,3 as orderWeight FROM tblTempValues UNION ALL
SELECT ''DEPARTMENT'' AS ID, CAST(DEPARTMENT AS VARCHAR(MAX)) AS Value, ROW_NUMBER() OVER(ORDER BY EMPID) AS RowId,4 as orderWeight FROM tblTempValues
)
SELECT
ID,'[email protected]+'
FROM
CTE
PIVOT
(
MAX(Value)
FOR RowId IN('[email protected]+')
) AS p'
EXECUTE(@query)
然后在我的情况下,我会下降临时表
DROP TABLE tblTempValues
你希望得到该表有多少行?做做你意识到当你有200个职业球员时,你需要201列?,你为什么需要这个? – Lamak 2012-02-29 14:06:41
你在哪里显示这些结果? – kaj 2012-02-29 14:10:38