当前位置: 代码迷 >> Sql Server >> 列转行 请问!
  详细解决方案

列转行 请问!

热度:59   发布时间:2016-04-24 18:18:04.0
列转行 请教!!!!!!!!
create table #hd(A INT,B INT)
INSERT #hd select 1,4
union all  select 2,5
union all  select 3,6
select *from #hd

目前查询结果
A    B
1    4
2    5
3    6
最终想实现结果
A 1 2 3
B 4 5 6
------解决方案--------------------
create table #hd(A INT,B INT)
INSERT #hd select 1,4
union all  select 2,5
union all  select 3,6
select *from #hd

SELECT 'A'
,MAX(CASE WHEN NUM=1 THEN A ELSE NULL END)
,MAX(CASE WHEN NUM=2 THEN A ELSE NULL END)
,MAX(CASE WHEN NUM=3 THEN A ELSE NULL END)
FROM (
SELECT A,B,ROW_NUMBER() OVER(ORDER BY GETDATE()) AS NUM
FROM #hd
)T
UNION ALL
SELECT 'B'
,MAX(CASE WHEN NUM=1 THEN B ELSE NULL END)
,MAX(CASE WHEN NUM=2 THEN B ELSE NULL END)
,MAX(CASE WHEN NUM=3 THEN B ELSE NULL END)
FROM (
SELECT A,B,ROW_NUMBER() OVER(ORDER BY GETDATE()) AS NUM
FROM #hd
)T
DROP TABLE #hd

------解决方案--------------------

select c,[1] 'v1',[2] 'v2',[3] 'v3'
from
(select c,v,row_number() over(partition by c order by v) 'rn'
 from #hd t
 unpivot(v for c in([A],[B])) u) a
pivot(max(v) for rn in([1],[2],[3])) b

/*
c          v1          v2          v3
---------- ----------- ----------- -----------
A          1           2           3
B          4           5           6

(2 row(s) affected)
*/
  相关解决方案