Sql 怎样将多列转换成一行多列

xiaoxiaodian123 2013-03-13 10:50:26

sql数据表 tb 如下

FID CerName StarTime EndTime
53 社保 2000-01-01 2003-01-01
53 银行 2000-02-01 2002-02-01

怎样转换成

FID 社保开始时间 社保结束时间 银行开始时间 银行结束时间
53 2000-01-01 2003-01-0 2000-02-01 2002-02-01


请假下各位:这样怎样进行转换成?
...全文
464 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiaodian123 2013-03-13
  • 打赏
  • 举报
回复
楼上的方法是正确的,谢谢。但是想做动态的,该怎样处理呢?
  • 打赏
  • 举报
回复
select fid,max(sbst)社保开始时间,max(sbet)社保结束时间,max(yhst)银行开始时间,max(yhet)银行结束时间
from(
select fid,sbst=case when CerName='社保' then starttime else null end,sbet=case when CerName='社保' then EndTime else null end,yhst=case when CerName='银行' then starttime else null end,yhet=case when CerName='银行' then EndTime else null end from tb 
)t group by fid
xiaoxiaodian123 2013-03-13
  • 打赏
  • 举报
回复
非常多谢楼上,谢谢。现在结贴
  • 打赏
  • 举报
回复
引用 2 楼 xiaoxiaodian123 的回复:
但是想做动态的,该怎样处理呢?
declare @sql nvarchar(max)
select @sql=isnull(@sql,'')+',max(case when CerName='''+CerName+''' then starttime else null end)['+CerName+'开始时间],max(case when CerName='''+CerName+''' then EndTime else null end)['+CerName+'结束时间]' from (select distinct CerName from tb)t
exec('select fid'+@sql+' from tb group by fid')
xiaoxiaodian123 2013-03-13
  • 打赏
  • 举报
回复
各位,有没有人知道呢?帮帮忙呀。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧