职位 职位类型 职位工作地 人数
职位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
厉害 我在想 是不是可以用连接的方式来做。但是 小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
+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
厉害 我在想 是不是可以用连接的方式来做。但是 小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
+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怎么理解??