我的表有一个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