日期:2014-05-17  浏览次数:20576 次

sql 行转列
本帖最后由 QAAnAfternoon 于 2013-03-29 16:27:41 编辑
DATA:
ID SID NAME PROD SERIES NUM
 1 1001 电脑 PC   台式机 100
 3 1001 电脑 WS   服务站 200
 2 1002 手机 A1   智能手机 200
 4 1003 投影仪 PJ  商用型  100
98 1003 投影仪 PJ  专业型  200
100 1003 投影仪 PJ  家用型  100

例如一次查询出以上信息,现在需要处理成
SID NAME PROD1 SERIES1 NUM1 PROD2 SERIES2 NUM2
1001 电脑 PC    台式机   100   WS    服务站   200
1002 手机 A1    智能手机 200   null  null   null
1003 投影仪 PJ  商用型   100   PJ    专业行  200

如果同一个SID出现2条以上信息,只需要2条


------解决方案--------------------
with cte as(
select *,row=row_number()over(partition by sid order by getdate()) from tb
)
select a.sid,a.name,prod1=a.prod,series1=a.series,num1=a.num,prod2=b.prod,series2=b.series,num2=b.num
from cte a left join cte b on a.name=b.name and b.row=2 where a.row=1