大家帮忙看一下这个SQL语句怎麽写,问题解决再给200分。(多表查询)(50分)

  • 主题发起人 huanghq123
  • 开始时间
H

huanghq123

Unregistered / Unconfirmed
GUEST, unregistred user!
工作票表:单位|高低压|工作票名称|是否合格
操作票表:单位|高低压|操作票名称|是否合格
查询后显示: | 高压 | 低压
单位名称|工作票数|合格率|操作票数|合格率|工作票数|合格率|操作票数|合格率

我用的access数据库

我的目的是从工作票表和操作票表中查询出单位名称相同的记录,但如果属于高压要放到高压的显示区域,如果属于低压要放到低压的显示区域。而且要算出工作票表中高压工作票的数量和合格高压工作票所占的比例(合格率),算出操作票表中高压操作票的数量和合格高压操作票所占的比例(合格率);还要算出作票表中低压工作票的数量和合格低压工作票所占的比例(合格率),算出操作票表中低压操作票的数量和合格高低压操作票所占的比例(合格率)
 
单位名称和合格率那张表的?
select a.单位,a.工作票数,a.合格率,b.操作票数,b.是否合格 from 工作票数表 a,操作票数表 b where a.单位=b.单位 and a.高低压=b.高低压
 
工作票表和操作票表的单位就是查询后的单位名称
工作票表和操作票表的高低压的值是高压或者低压
合格率根据工作票表和操作票表的是否合格的值来计算,是否合格的值是合格或不合格

我提供的是一个查询后在界面显示的一个表头。
 
你的表结构不够明确,字段类型和字段含义坎不明白,没法写。
你自己写的时候有一个原则:就是先分解你的数据,然后在合计。可能要用到full join
 
Select 单位名称=Case When a.单位名称 is null then b.单位名称 else a.单位名称 end,a.工作票数 as 高压作票数,b.合格率 as 高压工作票合格率,b.操作票数 as 高压操作票数,b.合格率 as 高压操作票合格率,c.工作票数 as 低压作票数,c.合格率 as 低压工作票合格率,d.操作票数 as 低压操作票数,d.合格率 as 低压操作票合格率
From (Select 单位名称,Count(工作票) as 工作票数,Sum(是否合格)/Count(否合格) AS 合格率 From 工作票表 Where 高低压='高压' GROUP BY 单位名称) a
FULL OUTER JOIN
(Select 单位名称,Count(操作票) as 操作票数,Sum(是否合格)/Count(否合格) AS 合格率 From 操作票表 Where 高低压='高压' GROUP BY 单位名称) b On a.单位名称=b.单位名称
FULL OUTER JOIN
(Select 单位名称,Count(工作票) as 工作票数,Sum(是否合格)/Count(否合格) AS 合格率 From 工作票表 Where 高低压='低压' GROUP BY 单位名称) c On a.单位名称=c.单位名称
FULL OUTER JOIN
(Select 单位名称,Count(操作票) as 操作票数,Sum(是否合格)/Count(否合格) AS 合格率 From 操作票表 Where 高低压='低压' GROUP BY 单位名称) d On a.单位名称=d.单位名称

这个就是结果。像楼主你要求的表头光用SQL语句是不可能实现的。
 
sungods的不对,楼主要的是对工作票和操作票数目的统计,和合格率。。
不过楼主没有说清楚高低压在表中怎么区分;
我下面就以高压为例子,低压的你自己看吧;
时间关系没有测试,意思是: 子查询查询出高压的工作票和操作票,然后合在一起查询;
select A.单位,A.高压 ,A.合格率,A.工作票数 from
(select 单位,高压,100*Convert(float,count(case when 是否合格='Y' then 1 end)) / Convert(float,Count(*)) As 合格率,Count(*) as 工作票数
group by 单位,高压) A
left jion
(select 单位,高压,100*Convert(float,count(case when 是否合格='Y' then 1 end)) / Convert(float,Count(*)) As 合格率,Count(*) as 工作票数
group by 单位,高压 ) B
on A.单位=B.单位 and A.高压=B.高压
 
哈哈!来晚了!被小虫絮掉了!
 
谢谢诸位让我消化消化,看得我眼晕。
问一下小虫,你提供的SQL语句,ACCESS全能支持吗

我再解释一下字段的值
高低压:高压或者低压
是否合格:合格或者不合格
 
楼主的表头需要设置GRID的列标题。查询结果还是这样的额;
 
ACCESS 不 支 持
 
谢谢Rasa
 
to Rasa:你写的子查询是不缺少 from 工作票表和 from 操作票表
to 小虫:运行报错(未知的错误)。是不是不支持ACCESS呀。
郁闷中
 
两行表头 怎么能用sql搞定啊。找个三方控件就行了。


-------------------------------------
www.coderpub.com
 
可能是ACCESS不支持吧。
我比较少用Access,都是用MSSQL的。
 
TO seabird_2000 :你理解错了,只需要按第二行显示就可以,但前提是如果记录属于高压就放再左边,属于低压就放在右边。
 
TO 小虫:非常感谢,有时间我在MSSQL再调试一下,结贴我再给你分。
 
对了,我写的子查询是缺少 from 工作票表和 from 操作票表,呵呵;
 
呵呵!Acess根本不支持Case
 

Similar threads

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