В моей таблице есть ID int (PK), а затем строки col1-col32. Значение в моих столбцах отличается от времени. Иногда 10 иногда заполняются и так далее. Могу ли я сделать эту динамику SQL, поэтому мне не нужно заполнять ее всеми 32 столбцами?Сделать мой SQL-запрос динамическим
WITH CTE
AS
(
SELECT *
FROM
(
SELECT ID,
Column_Name,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY col) row_num,
val
FROM tPivot A
INNER JOIN (SELECT Column_Name AS COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tPivot') B
ON A.ID = B.ORDINAL_POSITION - 1
UNPIVOT
(
val for col in (col1,col2,col3,col4,col5)
) unpvt
) A
PIVOT
(
MAX(val) FOR column_name IN (col1,col2,col3,col4,col5)
) pvt
)
SELECT *
FROM
(
SELECT ID,
row_num,
coalesce(col1,col2,col3,col4,col5) val
FROM cte
) A
PIVOT
(
MAX(val) FOR ID IN ([1],[2],[3],[4],[5])
) pvt
Обеспечения SQL скрипки с данными выборки –
HTTP://sqlfiddle.com/#!6/f7cfb/3 Вот как это выглядит. Нужно, чтобы правая часть тоже была динамичной. – user2210516