求SQL语句,一列数据分两列显示

时间:2022-12-07 10:31:23
共有10000条职位记录

职位          职位类型          职位工作地      人数
职位1         职能类               上海           3
职位2         招聘类               深圳           4
职位3         拓展类               上海           3
职位4         职能类               深圳           5
职位5         职能类               广州           2
职位6         策划类               佛山           1
职位7         建筑类               中山          10
职位8         销售类               深圳           2
..
..
..
职位10000    拓展类               昆明           2

现用sql语句,将以下数据按如下显示

职位          职位类型          职位工作地      人数     职位       职位类型       职位工作地     人数
职位1         职能类               上海           3      职位2      招聘类          深圳           4
职位3         拓展类               上海           3      职位4      职能类          深圳           5       
职位5         职能类               广州           2      职位6      策划类          佛山           1
职位7         建筑类               中山          10      职位8      销售类          深圳           2
..                                                       ..
..                                                       职位10000  拓展类          昆明           2

17 个解决方案

#1



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from(
    select *,rid=row_number() over (order by getdate())
    from tb
)t
group by (rid-1)/2

#2



--2000

select *,rid=identity(int,1,1)
  into #tb
from tb

select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from #tb
group by (rid-1)/2

drop table #tb

#3



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=1 then 人数 else 0 end) 人数1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2


上面漏掉了 人数1  补上就可以。

#4




select * from 表 a join  表  b on a.id+1=b.id


#5



select *,rid=(row_number() over (order by getdate()))-1 into #tb
    from tb

select * FROM #tb a inner join #tb b on a.rid/2=b.rid/2 and a.rid<b.rid

    

#6



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from(
    select *,rid=row_number() over (order by getdate())
    from tb
)t
group by (rid-1)/2

#7


思路:把能查到的所有结果集排上序号,按照序号,如果是奇数则在左面这列,如果是偶数则在右面这一列

#8


select
     max(case when id%2=1 then 人数 else 0 end) 人数1,
     max(case when id%2=1 then 职位 else '' end) 职位1,
     max(case when id%2=1 then 职位类型 else '' end) 职位类型1,
     max(case when id%2=1 then 职位工作地 else '' end) 职位工作地1,
     max(case when id%2=0 then 职位 else '' end) 职位2,
     max(case when id%2=0 then 职位类型 else '' end) 职位类型2,
     max(case when id%2=0 then 职位工作地 else '' end) 职位工作地2,
     max(case when id%2=0 then 人数 else 0 end) 人数2
from(
    select *,id=row_number() over (order by getdate()) bfrom tb
)t
group by
   (id-1)/2

#9


引用 8 楼 fredrickhu 的回复:
SQL code

select
     max(case when id%2=1 then 人数 else 0 end) 人数1,
     max(case when id%2=1 then 职位 else '' end) 职位1,
     max(case when id%2=1 then 职位类型 else '' end) 职位类型1,
     max(case when……


厉害  我在想 是不是可以用连接的方式来做。但是 小F的 好些

#10


涉及行列转换,可以用case语句

#11



declare @tb table (职位 varchar(10),职位类型  varchar(10),职位工作地  varchar(10),人数 int)
insert into @tb(职位,职位类型,职位工作地,人数)
select '职位1','职能类','上海',3 union all
select '职位2','招聘类','深圳',4 union all
select '职位3','拓展类','上海',3 union all
select '职位4','职能类','深圳',5 union all
select '职位5','职能类','广州',2 union all
select '职位6','策划类','佛山',1 union all
select '职位7','建筑类','中山',10 union all
select '职位8','销售类','深圳',2

;with cte as (
select ROW_NUMBER()over(order by 职位) as row,* from @tb
)
select a.职位,a.职位类型,a.职位工作地,a.人数,b.职位,b.职位类型,b.职位工作地,b.人数 
from cte as a inner join cte as b on a.row=b.row-1 where a.row%2=1
------------------------------------------------------------------------------------
职位         职位类型       职位工作地      人数          职位         职位类型       职位工作地      人数
---------- ---------- ---------- ----------- ---------- ---------- ---------- -----------
职位1        职能类        上海         3           职位2        招聘类        深圳         4
职位3        拓展类        上海         3           职位4        职能类        深圳         5
职位5        职能类        广州         2           职位6        策划类        佛山         1
职位7        建筑类        中山         10          职位8        销售类        深圳         2

#12



献丑了   呵呵……   初学SQL

create table #temp1
(
Position nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

insert #temp1
values('职位1','职能','上海',3)
insert #temp1
values('职位2','招聘','深圳',3)
insert #temp1
values('职位3','拓展','上海',3)
insert #temp1
values('职位4','职能','深圳',3) 

select AllTable1.PositionID,AllTable1.PositionType,AllTable1.WorkPlace,AllTable1.WorkingNumber
  ,AllTable2.PositionID,AllTable2.PositionType,AllTable2.WorkPlace,AllTable2.WorkingNumber
from(
select 
case SubString(t1.Position,1,2)
  when '职位' then SubString(t1.Position,3,1)
end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1
) as AllTable1
join
(select PositionID,PositionType,WorkPlace,WorkingNumber
from(
select 
case SubString(t1.Position,1,2)
  when '职位' then SubString(t1.Position,3,1)
end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1
) as AllTable1) as AllTable2 on AllTable2.PositionID=AllTable1.PositionID+1
--where AllTable1.PositionID%2=1 and AllTable2.PositionID%2=0
where AllTable1.PositionID%2=1
drop table #temp1
go


#13


引用 11 楼 chtzhking 的回复:
SQL code

declare @tb table (职位 varchar(10),职位类型  varchar(10),职位工作地  varchar(10),人数 int)
insert into @tb(职位,职位类型,职位工作地,人数)
select '职位1','职能类','上海',3 union all
select '职位2','招聘类','深圳',4 union all
……
+1

#14


稍作修改,看着简单点。

create table #temp1
(
Position nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

create table #table1
(
PositionID nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go
create table #table2
(
PositionID nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

insert #temp1
values('职位1','职能','上海',3)
insert #temp1
values('职位2','招聘','深圳',3)
insert #temp1
values('职位3','拓展','上海',3)
insert #temp1
values('职位4','职能','深圳',3) 

insert into #table1
select 
    case SubString(t1.Position,1,2)
      when '职位' then SubString(t1.Position,3,1)
    end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1

insert into #table2
select PositionID,PositionType,WorkPlace,WorkingNumber
from #table1

select t1.*,t2.*
from #table1 t1 
join #table2 t2 on t2.PositionID=t1.PositionID+1
where t1.PositionID%2=1

--release temp tables.
drop table #temp1
drop table #table1
drop table #table2
go

#15


厉害,千万人 人员

#16


学习下下

#17


group by (rid-1)/2怎么理解??

#1



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from(
    select *,rid=row_number() over (order by getdate())
    from tb
)t
group by (rid-1)/2

#2



--2000

select *,rid=identity(int,1,1)
  into #tb
from tb

select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from #tb
group by (rid-1)/2

drop table #tb

#3



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=1 then 人数 else 0 end) 人数1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2


上面漏掉了 人数1  补上就可以。

#4




select * from 表 a join  表  b on a.id+1=b.id


#5



select *,rid=(row_number() over (order by getdate()))-1 into #tb
    from tb

select * FROM #tb a inner join #tb b on a.rid/2=b.rid/2 and a.rid<b.rid

    

#6



select max(case when rid%2=1 then 职位 else '' end) 职位1,
       max(case when rid%2=1 then 职位类型 else '' end) 职位类型1,
       max(case when rid%2=1 then 职位工作地 else '' end) 职位工作地1,
       max(case when rid%2=0 then 职位 else '' end) 职位2,
       max(case when rid%2=0 then 职位类型 else '' end) 职位类型2,
       max(case when rid%2=0 then 职位工作地 else '' end) 职位工作地2,
       max(case when rid%2=0 then 人数 else 0 end) 人数2
from(
    select *,rid=row_number() over (order by getdate())
    from tb
)t
group by (rid-1)/2

#7


思路:把能查到的所有结果集排上序号,按照序号,如果是奇数则在左面这列,如果是偶数则在右面这一列

#8


select
     max(case when id%2=1 then 人数 else 0 end) 人数1,
     max(case when id%2=1 then 职位 else '' end) 职位1,
     max(case when id%2=1 then 职位类型 else '' end) 职位类型1,
     max(case when id%2=1 then 职位工作地 else '' end) 职位工作地1,
     max(case when id%2=0 then 职位 else '' end) 职位2,
     max(case when id%2=0 then 职位类型 else '' end) 职位类型2,
     max(case when id%2=0 then 职位工作地 else '' end) 职位工作地2,
     max(case when id%2=0 then 人数 else 0 end) 人数2
from(
    select *,id=row_number() over (order by getdate()) bfrom tb
)t
group by
   (id-1)/2

#9


引用 8 楼 fredrickhu 的回复:
SQL code

select
     max(case when id%2=1 then 人数 else 0 end) 人数1,
     max(case when id%2=1 then 职位 else '' end) 职位1,
     max(case when id%2=1 then 职位类型 else '' end) 职位类型1,
     max(case when……


厉害  我在想 是不是可以用连接的方式来做。但是 小F的 好些

#10


涉及行列转换,可以用case语句

#11



declare @tb table (职位 varchar(10),职位类型  varchar(10),职位工作地  varchar(10),人数 int)
insert into @tb(职位,职位类型,职位工作地,人数)
select '职位1','职能类','上海',3 union all
select '职位2','招聘类','深圳',4 union all
select '职位3','拓展类','上海',3 union all
select '职位4','职能类','深圳',5 union all
select '职位5','职能类','广州',2 union all
select '职位6','策划类','佛山',1 union all
select '职位7','建筑类','中山',10 union all
select '职位8','销售类','深圳',2

;with cte as (
select ROW_NUMBER()over(order by 职位) as row,* from @tb
)
select a.职位,a.职位类型,a.职位工作地,a.人数,b.职位,b.职位类型,b.职位工作地,b.人数 
from cte as a inner join cte as b on a.row=b.row-1 where a.row%2=1
------------------------------------------------------------------------------------
职位         职位类型       职位工作地      人数          职位         职位类型       职位工作地      人数
---------- ---------- ---------- ----------- ---------- ---------- ---------- -----------
职位1        职能类        上海         3           职位2        招聘类        深圳         4
职位3        拓展类        上海         3           职位4        职能类        深圳         5
职位5        职能类        广州         2           职位6        策划类        佛山         1
职位7        建筑类        中山         10          职位8        销售类        深圳         2

#12



献丑了   呵呵……   初学SQL

create table #temp1
(
Position nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

insert #temp1
values('职位1','职能','上海',3)
insert #temp1
values('职位2','招聘','深圳',3)
insert #temp1
values('职位3','拓展','上海',3)
insert #temp1
values('职位4','职能','深圳',3) 

select AllTable1.PositionID,AllTable1.PositionType,AllTable1.WorkPlace,AllTable1.WorkingNumber
  ,AllTable2.PositionID,AllTable2.PositionType,AllTable2.WorkPlace,AllTable2.WorkingNumber
from(
select 
case SubString(t1.Position,1,2)
  when '职位' then SubString(t1.Position,3,1)
end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1
) as AllTable1
join
(select PositionID,PositionType,WorkPlace,WorkingNumber
from(
select 
case SubString(t1.Position,1,2)
  when '职位' then SubString(t1.Position,3,1)
end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1
) as AllTable1) as AllTable2 on AllTable2.PositionID=AllTable1.PositionID+1
--where AllTable1.PositionID%2=1 and AllTable2.PositionID%2=0
where AllTable1.PositionID%2=1
drop table #temp1
go


#13


引用 11 楼 chtzhking 的回复:
SQL code

declare @tb table (职位 varchar(10),职位类型  varchar(10),职位工作地  varchar(10),人数 int)
insert into @tb(职位,职位类型,职位工作地,人数)
select '职位1','职能类','上海',3 union all
select '职位2','招聘类','深圳',4 union all
……
+1

#14


稍作修改,看着简单点。

create table #temp1
(
Position nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

create table #table1
(
PositionID nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go
create table #table2
(
PositionID nvarchar(50),
PositionType nvarchar(20),
WorkPlace nvarchar(20),
WorkingNumber int
)
go

insert #temp1
values('职位1','职能','上海',3)
insert #temp1
values('职位2','招聘','深圳',3)
insert #temp1
values('职位3','拓展','上海',3)
insert #temp1
values('职位4','职能','深圳',3) 

insert into #table1
select 
    case SubString(t1.Position,1,2)
      when '职位' then SubString(t1.Position,3,1)
    end as PositionID,PositionType,WorkPlace,WorkingNumber
from #temp1 t1

insert into #table2
select PositionID,PositionType,WorkPlace,WorkingNumber
from #table1

select t1.*,t2.*
from #table1 t1 
join #table2 t2 on t2.PositionID=t1.PositionID+1
where t1.PositionID%2=1

--release temp tables.
drop table #temp1
drop table #table1
drop table #table2
go

#15


厉害,千万人 人员

#16


学习下下

#17


group by (rid-1)/2怎么理解??