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