sql表转换(100分)

  • 主题发起人 主题发起人 嫁给cpu
  • 开始时间 开始时间

嫁给cpu

Unregistered / Unconfirmed
GUEST, unregistred user!
表1
部门名称 性别 人数

人事部门 男 2
人事部门 女 9
生产部门 男 1
主管部门 女 8
我想的到的结果是:
部门名称 男 女

人事部门 2 9
生产部门 1 0
主管部门 0 8
 
SELECT 部门名称,
(SELECT 人数 FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='男') as 男,
(SELECT 人数 FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='女') as 女,
FROM 表1
 
首先谢谢你的回答!
可是错误提示是:查询的返回值是多个!
 
SELECT 部门名称,
(SELECT SUM(人数) FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='男') as 男,
(SELECT SUM(人数) FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='女') as 女,
FROM 表1
GROUP BY 部门名称
---
这样看看
 
SELECT DISTINCT 部门名称,
(SELECT 人数 FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='男') as 男,
(SELECT 人数 FROM 表1 a WHERE a.部门名称=部门名称 AND a.性别='女') as 女,
FROM 表1
---
或者这个
 
典型的使用case语句的例子
 
CREATE PROCEDURE mytable AS

declare @bm varchar(16),
@nr varchar(6),
@nv varchar(6),
@tmp1 varchar(8000)

create table #temp(bm varchar(16),sex varchar(2),data varchar(10))

insert into #temp(bm,sex,data)
select 所在部门,性别, count(性别) as 人数
from test
group by 所在部门,性别

create table #temp1(bm1 varchar(16), nr1 varchar(6),nv1 varchar(6) )
insert into #temp1(bm1,nr1,nv1)
select bm,data,0 from #temp where sex='男'
insert into #temp1(bm1,nr1,nv1)
select bm,0,data from #temp where sex='女'


create table #temp2(部门名称 varchar(16),男 varchar(6), 女 varchar(6) )

insert into #temp2(部门名称,男,女)
select bm,data,0 from #temp where sex='男'

declare cur_yb cursor for
select bm1,nr1,nv1 from #temp1
open cur_yb

fetch next from cur_yb into @bm,@nr,@nv
while @@fetch_status=0
begin
set @tmp1=null
select @tmp1=女 from #temp2 where 部门名称=@bm
if @tmp1=null
begin
insert into #temp2(部门名称,男,女)
select bm1,nr1,nv1 from #temp1 where bm1=@bm
end
else
begin
update #temp2 set 女=@nv where 部门名称=@bm
end
fetch next from cur_yb into @bm,@nr,@nv
end
close cur_yb

select * from #temp2
group by 部门名称,男,女
GO
--------------------------
我研究出来了!
只是可以实现!大家帮我看看不足之处
请雅正………………谢谢合作
 
学习学习~~~
 
用游标当然是可以的,但是你不觉得这样很浪费资源吗?
你的要求一条语句就可以统计出来啊。
 
是阿!速度很慢!?
 
select 部门名称,sum(case when 性别='男' then 人数 else 0 end) as '男',
sum(case when 性别='女' then 人数 else 0 end) as '女' from t_d group by 部门名称
 
如果数据库版本比较低的话,不支持Case,请用:select 部门名称,sum(decode(性别,男,1,0)) 男,sum(decode(性别,女,1,0))女 from #temp2
group by 部门名称
 

Similar threads

D
回复
0
查看
792
DelphiTeacher的专栏
D
D
回复
0
查看
826
DelphiTeacher的专栏
D
D
回复
0
查看
658
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部