SQl怎样实现这样的统计查询?(100分)

  • 主题发起人 主题发起人 yybug
  • 开始时间 开始时间
Y

yybug

Unregistered / Unconfirmed
GUEST, unregistred user!
学生表的结构:
stu_no Stu_name Stu_sex Stu_Class_no Stu_Nation_no Stu_Spec_no
99020301 张山 男 990203 汉族 电器专业


民族表的结构:
nation_no Nation_name Nation_alias
01 汉族 汉
02 土家族 土

班级表的结构
class_no class_name
99020301 自动化991班

现在我想做几个统计
1、统计每个班各民族有多少人?
class_no nation1(汉族) nation2(土家族) nation3(苗族) nation4(蒙古).......
99020301 20 2 0 1
99020302 30 0 1 0

2、统计每个班有多少男性?
class_no sex1(男) sex2(女)
99020301 18 5
99020302 15 17


请问高手这样的sql该如何写?
 
1.构造一个这样的SQL
select class_no,
sum(case when Stu_Nation_no='汉族' then 1 else 0 end) as nation1(汉族),
sum(case when Stu_Nation_no='土族' then 1 else 0 end) as nation1(土族),
sum(case when Stu_Nation_no='苗族' then 1 else 0 end) as nation1(苗族),
......
group by class_no
2.类似的
select class_no,
sum(case when Stu_sex='男' then 1 else 0 end) as sex1,
sum(case when Stu_sex='女' then 1 else 0 end) as sex2,
group by class_no
 
建一个临时表Stu_Class_no(班别) Stu_Nation_no(民族或性别) count_no(记录数)
从学生表中筛选资料加入临时表(用group by )
每加一条记录临时表中的count_no就加1

[:)]
代码:
 
to dj
如果有56个民族,那不久要写非常多的语句了,能不能有一个简单点的办法.
to 梅子
能不能写清楚一点
谢谢2位大虾!
 
从学生表中筛选资料加入临时表:(query1连接学生一表,query2连接临时表)
query1.sql.clear;
query1.sql.add('select Stu_Class_no,Stu_Nation_no from 学生表 group by Stu_Class_no,Stu_Nation_no');
query1.open;
while query1.eof do
begin
query2.append;
query2.fieldbyname('Stu_Class_no').asstring:=query1.fieldbyname('Stu_Class_no').asstring;
query2.fieldbyname(Stu_Nation_no ').asstring:=query1.fieldbyname(Stu_Nation_no ').asstring;
query2.fieldbyname('count_no').asfloat:=query2.fieldbyname('count_no').asfloat+1;
query2.post;
query1.next;
end;
然后再在临时表中把料读出来。
 
后退
顶部