Может быть что-то вроде этого:
Первые тестовые данные:
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
вкл.Я использую ROW_NUMBER
вместо EMPID
:
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,'+@cols+'
FROM
CTE
PIVOT
(
MAX(Value)
FOR RowId IN('+@cols+')
) AS p'
EXECUTE(@query)
Тогда в моем случае я опущу временную таблицу
DROP TABLE tblTempValues