你可以使用UNPIVOT然後Dynamic PIVOT
DEMO
設置:
create table temp (
col1 integer, col2 integer, col3 integer
)
insert into temp values (1, 1, 1000);
insert into temp values (1, 2, 500);
insert into temp values (2, 3, 800);
insert into temp values (2, 4, 700);
insert into temp values (3, 1, 1100);
UNPIVOT查詢:您需要一個row_number
來創建一個虛假的列名稱。但隨後覆蓋行1
給大家,讓所有列出現在單行
WITH cte as (
SELECT row_number() over (order by col1, col2) as rn,
col1, col2, col3
FROM temp
)
SELECT 1 as rn,
'c_' +
CAST(rn AS VARCHAR(16)) + '_' +
myCol as myCol,
myVal
INTO temp2
FROM
(SELECT rn, col1, col2, col3
FROM cte) p
UNPIVOT
(myVal FOR myCol IN
(col1, col2, col3)
)AS unpvt;
SELECT * FROM temp2;
動態透視:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.myCol)
FROM temp2 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT rn, ' + @cols + ' from
(
select rn
, myCol
, myVal
from temp2
) x
pivot
(
max(myVal)
for myCol in (' + @cols + ')
) p ';
EXEC sp_executesql @query
輸出:逆透視和動態透視結果
![enter image description here](https://i.stack.imgur.com/LyflL.png)
對不起,這太混亂了,你可以給我看一下wh在你想要的結果? '如果有多個數據,那麼我需要像下面這樣做,直到15次< - 這是什麼意思?,爲什麼15次? – Lamak
如果你想要新的列,我相信你將不得不選擇它們。 –
@Lamak我已經更新了期望的問題,謝謝 – Akka