请教如何把垂直排列变成水平排列?

JOHNCOOLS 2007-01-19 12:24:09
表结构如下:
自编号 司机姓名 人员编号
001 张三 0000001
001 李四 0000002
001 小明 0000003
001 小张 0000004
002 高辉 0000005
002 小光 0000006

现在希望通过一个新表或视图实现如下的
自编号 司机姓名1 人员编号1 司机姓名2 人员编号2 司机姓名3 人员....
001 张三 0000001 李四 0000002 小明 000003
002 高辉 0000005 小光 0000006



补充说明:同一个自编号最多只会出现4个司机


请教各位怎样实现呢?
...全文
486 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
marco08 2007-01-19
  • 打赏
  • 举报
回复
create table T(自编号 varchar(20), 司机姓名 varchar(20), 人员编号 varchar(20))
insert T select '001', '张三', '0000001'
union all select '001', '李四', '0000002'
union all select '001', '小明', '0000003'
union all select '001', '小张', '0000004'
union all select '002', '高辉', '0000005'
union all select '002', '小光', '0000006'

select *, Sort=(select count(*) from T where 自编号=tmp.自编号 and 人员编号<=tmp.人员编号)
into #T
from T as tmp


select 自编号,
司机姓名1=max(case when Sort=1 then 司机姓名 end),
人员编号1=max(case when Sort=1 then 人员编号 end),

司机姓名2=max(case when Sort=2 then 司机姓名 end),
人员编号2=max(case when Sort=2 then 人员编号 end),

司机姓名3=max(case when Sort=3 then 司机姓名 end),
人员编号3=max(case when Sort=3 then 人员编号 end),

司机姓名4=max(case when Sort=4 then 司机姓名 end),
人员编号5=max(case when Sort=4 then 人员编号 end)

from #T
group by 自编号

--结果就不贴了
jcyluck 2007-01-19
  • 打赏
  • 举报
回复
行转列的问题
marco08 2007-01-19
  • 打赏
  • 举报
回复
這不是交叉表的問題, 是行列轉換的問題
JOHNCOOLS 2007-01-19
  • 打赏
  • 举报
回复
应该是交叉表的问题啊!!请问可以用交叉表的方法出来吗?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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