把一列写成多列???
模块编号角色编号命令编号
ModuleID RoleIDModuleOrderID
001 001001
001 001002
001 001003
001 001004
001 001005
001 001006
001 001007
001 001008
001 001009
001 001010
001 001011
001 001012
001 001013
转换成:
模块编号角色编号命令编号命令编号命令编号
ModuleID RoleIDModuleOrderIDModuleOrderID1ModuleOrderID2
001 001001 002 003
001 001004 005 006
001 001007 008 009
001 001010 011 012
001 001013
[解决办法]
create table tb(ModuleID varchar(3),RoleID varchar(3),ModuleOrderID varchar(3))insert into tb values('001','001','001') insert into tb values('001','001','002') insert into tb values('001','001','003') insert into tb values('001','001','004') insert into tb values('001','001','005') insert into tb values('001','001','006') insert into tb values('001','001','007') insert into tb values('001','001','008') insert into tb values('001','001','009') insert into tb values('001','001','010') insert into tb values('001','001','011') insert into tb values('001','001','012') insert into tb values('001','001','013') goselect ModuleID,RoleID,ModuleOrderID,ModuleOrderID1,ModuleOrderID2 from( select ModuleID,RoleID,c1, max(case c2 when 0 then ModuleOrderID else '' end) ModuleOrderID, max(case c2 when 1 then ModuleOrderID else '' end) ModuleOrderID1, max(case c2 when 2 then ModuleOrderID else '' end) ModuleOrderID2 from ( select ModuleID,RoleID,ModuleOrderID,(cast(ModuleOrderID as int)-1)/3 c1,(ModuleOrderID-1)%3 c2 from tb ) t group by ModuleID,RoleID,c1) mdrop table tb/*ModuleID RoleID ModuleOrderID ModuleOrderID1 ModuleOrderID2 -------- ------ ------------- -------------- -------------- 001 001 001 002 003001 001 004 005 006001 001 007 008 009001 001 010 011 012001 001 013 (所影响的行数为 5 行)*/
[解决办法]
declare @T table (ModuleID varchar(3),RoleID varchar(3),ModuleOrderID varchar(3))insert into @T values('001','001'f