送分,菜鸟问题,在线求SQL语句 (100分)

  • 主题发起人 主题发起人 blave
  • 开始时间 开始时间
B

blave

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi5+access2000,表'挂号信息'有以下字段[:(][:(][:(]
科室 医生 性质 病历费 挂号费 操作人
内科 张三 公费 2.00 5.00 挂号1
外科 李四 自费 0.00 1.00 挂号2
儿科 王五 自费 2.00 2.00 挂号1
内科 刘六 自费 0.00 2.00 挂号1
.......
要得到的统计表有

科室 自费 公费 总计
内科 1 1 2 (数量)
外科 1 0 1
儿科 1 0 1
........

医生 科室 自费 公费 合计
张三 内科 1 1 2 (数量)
.......

操作人 自费 公费 病历费 挂号费 合计挂号人数 合计费用
挂号1 2 1 4.00 9.00 3 13.00
挂号2 1 0 0.00 1.00 1 1.00
......

我的第一个是这样处理的
adoquery4.SQL.add('select 挂号信息.挂号科别, count(a.性质) as 自费 , count(b.性质) as 公费 from 挂号信息 a ,挂号信息 b,挂号信息);
adoquery4.SQL.add('where (a.挂号科别=挂号信息.挂号科别 and a.性质=''自费'')and(b.挂号科别=挂号信息.挂号科别 and b.性质=''公费'')' );
adoquery4.SQL.add('group by 挂号信息.挂号科别');
得出的结果很离谱!!!

请求帮助,在线等待回答,测试正确立即结束!!
 
一:
select 科室,count(自费) as '自费',count(公费) as '公费', 自费+公费 as '总计' from 表 group by 科室
二:不明白
三:
select 操作人,count(自费) as '自费',count(公费) as '公费',sum(病历费) as '病历费',sum(挂号费) as '挂号费',自费+公费 as '合计挂号人数',病历费+挂号费 as '合计费用' from 表 group by 操作人

没有调试过,大致就这样!
 
其实就是用分组查询group by字句。
 
to wddelphi
第二个就是算出医生的门诊量
 
例如:(一)
select a.科室, b.自费, c.公费, b.自费 + c.公费 as "总计"
from 挂号信息 a,
(select 科室, count(自费) from 挂号信息
where 性质= "自费" group by 科室) b,
(select 科室, count(公费) from 挂号信息
where 性质= "公费" group by 科室) c
where a.科室 = b.科室
and a.科室 = c.科室
其余类似.
 
分成多条进行 Count
select 科室,count(*) as 自费
from TableList
Group by 科室
where 性质='自费'

select 科室,count(*) as 公费
from TableList
Group by 科室
where 性质='公费'
 
二、
select 医生,科室,count(自费) as '自费',count(公费) as '公费', 自费+公费 as '合计' from 表 group by 医生,科室

但是如果一个医生是属于两个科室的,那么这个医生就会有两条记录,这样分组统计的结果也许不是你想要的,
select 医生,min(科室) as '科室',count(自费) as '自费',count(公费) as '公费', 自费+公费 as '合计' from 表 group by 医生,科室
可以算出医生的门诊量,但他的科室信息不全,所以这个查询的科室字段放在结果集内可能有问题。
 
to riversoft
你的方法实现不了一个SQL语句完成正个查询
to Yang J.Q
运行失败,错误提示:
Syntax error in FORM clause.
to wddelphi
没办法,不对,还是Yang sir 的回答最接近
 
不可能啊?什么地方不对?如果我没理解错,问题一要得到的是每个科室的自费、公费人
数及其总数,不需要写什么条件,这是典型的分组查询的应用啊!问题三也是的,你等等,
我建表试试!
 
to wddelphi
公费和自费是性质字段里的值,而不是字段,这个问题可能就是麻烦在的判断性质字段里的
自费和工费区别,然后分别统计吧
 
是的,我弄错了,Yang J.Q.大获全胜,恭喜恭喜!
 
送你个这个,这叫“参考外部数据”,效率比较低,但有时可以做出些特殊的查询。
select a.科室,(select count(性质) from 表 as b where a.科室=b.科室 and b.性质='自费') as 自费,(select count(性质) from 表 as b where a.科室=b.科室 and b.性质='公费') as 公费, 自费+公费 as '总计' from 表 as a group by a.科室
 
一.
select distinct(w.科室),a.自费,b.公费,a.自费+b.公费
from (select count(性质) 自费 from 挂号信息 where 性质='自费') a,
(select count(性质) 公费 from 挂号信息 where 性质='公费') b,
挂号信息 w
where a.科室=w.科室 and b.科室=w.科室
二.
select w.医生,w.科室,a.自费,b.公费,a.自费+b.公费
from (select 医生,科室,count(性质) 自费 from 挂号信息 where 性质='自费') a,
(select 医生,科室,count(性质) 公费 from 挂号信息 where 性质='公费') b,
挂号信息 w
where a.医生=w.医生 and
a.科室=w.科室 and
b.医生=w.医生 and
b.科室=w.科室
三.仿照上面两个自己写一下.

 
to wddelphi
可...可Yang sir的答案也不正确啊,起码我现在没调试出来

我还在等待大家的答案!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
to 北斗
我用的是access2000,在运行你的代码时,提示a.科室 不是一个default value
 
select c.科室 , sum(a.自费), suM(b.公费),(sum(a.自费)+ suM(b.公费)) as 总计
from tablename c,
(select 科室 ,count(性质)as 自费 from tablename group by 科室 where 性质='自费' )as a,
(select 科室 ,count(性质)as 公费 from tablename group by 科室 where 性质='公费' )as b

group by c.科室


其他的雷同,你试一下

 
用“参考外部数据”吧,我在access2000中通过了:
一、
select a.科室,(select count(性质) from 表 as b where a.科室=b.科室 and b.性质='自费') as 自费,(select count(性质) from 表 as b where a.科室=b.科室 and b.性质='公费') as 公费, 自费+公费 as '总计' from 表 as a group by a.科室
三、
SELECT a.操作人, (select count(b.性质) from 表 as b where a.操作人=b.操作人 and b.性质='自费') AS 自费, (select count(b.性质) from 表 as b where a.操作人=b.操作人 and b.性质='公费') AS 公费, sum(a.病历费) AS 病历费, sum(a.挂号费) AS 挂号费, 自费+公费 AS 合计挂号人数, [病历费]+[挂号费] AS 合计费用
FROM 表 AS a
GROUP BY a.操作人;

至于二,我懒得写了,参照一和三应该写得出来了吧!
 
现在这里的网络很不正常,一会儿可能上不了了。
 
access支持SQL的嵌套吗
 
to wddelphi
我用的是ado+access,你给我的代码我没有测试通过,能将你的源码发给我吗,谢谢
 

Similar threads

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