sql 问题 合并表

xaojancsdn 2004-07-29 03:16:52
教师表:
id(自增) xl(学历) zc(职称) zw(职务) rznj(所教年级类别)
1 本科 高级 校长 高中
2 研究生 高级 副校长 初中
3 专科 中级 主任 小学


怎样得到这样的一个查询结果:

AA(列名) BB CC(对应的人数)
学历 本科 1
研究生 1
专科 1
职务 校长 1
副校长 1
职称 高级 2
中级 1

...全文
152 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xaojancsdn 2004-07-29
  • 打赏
  • 举报
回复
非常感邹工的帮助。我想可以给分了。
我终于得到这个结果:
学历 0
本科 1 20.0%
博士 1 20.0%
研究生 2 40.0%
专科 1 20.0%
小 计: 5
职称 0
高级 3 60.0%
特级 1 20.0%
中级 1 20.0%
小 计: 5
tiantdesigner 2004-07-29
  • 打赏
  • 举报
回复
我也頂一下﹐關注﹗﹗不知道怎么解決這個順序的問題﹗﹗
zjcxc 2004-07-29
  • 打赏
  • 举报
回复
--group by 改变了顺序,加个排序吧

select AA,BB,CC
from(
select AA=case min(id) when (select id=min(id) from 教师表) then '学历' else '' end
,BB=xl,CC=count(*),s1=0
from 教师表
group by XL
union all
select AA=case min(id) when (select id=min(id) from 教师表) then '职务' else '' end
,BB=zw,CC=count(*),s1=1
from 教师表
group by zw
union all
select AA=case min(id) when (select id=min(id) from 教师表) then '职称' else '' end
,BB=zc,CC=count(*),s1=2
from 教师表
group by zc
)a order by s1,AA desc
xaojancsdn 2004-07-29
  • 打赏
  • 举报
回复
为什么会这样:

本科 1
学历 研究生 2(学历为什么不在上一行)??
专科 1
副校长 1
职务 校长 1
主任 1
职称 高级 2
中级 1

每一组左一例为什么不定在第一行呢?
liwei7862569 2004-07-29
  • 打赏
  • 举报
回复
邹建大哥何许人,有空交流一下吧,高手!!!
zjcxc 2004-07-29
  • 打赏
  • 举报
回复
--那就这样
--查询
select AA=case min(id) when (select id=min(id) from 教师表) then '学历' else '' end
,BB=xl,CC=count(*)
from 教师表
group by XL
union all
select AA=case min(id) when (select id=min(id) from 教师表) then '职务' else '' end
,BB=zw,CC=count(*)
from 教师表
group by zw
union all
select AA=case min(id) when (select id=min(id) from 教师表) then '职称' else '' end
,BB=zc,CC=count(*)
from 教师表
group by zc
futulove 2004-07-29
  • 打赏
  • 举报
回复
一样的在1的左右两边各加上一个'就可以了
xaojancsdn 2004-07-29
  • 打赏
  • 举报
回复
如果id不是自增字段而是一个varchar(30)主键呢?
xaojancsdn 2004-07-29
  • 打赏
  • 举报
回复
测试一下,正确马上结帖
futulove 2004-07-29
  • 打赏
  • 举报
回复
分析了一上感觉真的不难,就是想不到呀,
哈哈
futulove 2004-07-29
  • 打赏
  • 举报
回复
哈哈
邹健一出马,
谁也挡不住呀
zjcxc 2004-07-29
  • 打赏
  • 举报
回复
--测试

--测试数据
create table 教师表(id int,xl varchar(10),zc varchar(10),zw varchar(10),rznj varchar(10))
insert 教师表 select 1,'本科' ,'高级','校长' ,'高中'
union all select 2,'研究生','高级','副校长','初中'
union all select 3,'专科' ,'中级','主任' ,'小学'
go

--查询
select AA=case min(id) when 1 then '学历' else '' end
,BB=xl,CC=count(*)
from 教师表
group by XL
union all
select AA=case min(id) when 1 then '职务' else '' end
,BB=zw,CC=count(*)
from 教师表
group by zw
union all
select AA=case min(id) when 1 then '职称' else '' end
,BB=zc,CC=count(*)
from 教师表
group by zc
go

--删除测试
drop table 教师表

/*--测试结果

AA BB CC
---- ---------- -----------
学历 本科 1
研究生 1
专科 1
副校长 1
职务 校长 1
主任 1
职称 高级 2
中级 1

(所影响的行数为 8 行)

--*/
zjcxc 2004-07-29
  • 打赏
  • 举报
回复
--改改

select AA=case min(id) when 1 then '学历' else '' end
,BB=xl,CC=count(*)
from 教师表
group by XL
union all
select AA=case min(id) when 1 then '职务' else '' end
,BB=zw,CC=count(*)
from 教师表
group by zw
union all
select AA=case min(id) when 1 then '职称' else '' end
,BB=zc,CC=count(*)
from 教师表
group by zc
zjcxc 2004-07-29
  • 打赏
  • 举报
回复
select AA=case id when 1 then '学历' else '' end
,BB=xl,CC=count(*)
from 教师表
group by XL
union all
select AA=case id when 1 then '职务' else '' end
,BB=zw,CC=count(*)
from 教师表
group by XL
union all
select AA=case id when 1 then '职称' else '' end
,BB=zc,CC=count(*)
from 教师表
group by XL

27,579

社区成员

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

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