我认为是SQL里的难题,您呢? (:)-) 200分……(200分)

  • 主题发起人 主题发起人 zhbj
  • 开始时间 开始时间
Z

zhbj

Unregistered / Unconfirmed
GUEST, unregistred user!
回答此题并拿出成功答案的,可的200 分。

有查询 Query1 有如下字段(两个表T1,T2产生的,T2的"姓名","单位"字段是对T1的 Lookup 字段):
(注意:单位数是变量,即还有可能出现七队,十二队 …… )

ID 姓名 单位 工资 表现
--------------------------------------------------
1001 张三 一队 100 优秀
1002 李四 一队 200 一般
1003 王五 二队 300 良好
1004 周六 三队 450 一般
… … … … …
---------------------------------------------------
现要求统计显示、打印{一定要}出如下报表 :
队别 人数 优秀 一般 良好 较差 //上表中较差的记录没有
---------------------------------------------------
一队 2 1 1 0 0
二队 1 0 0 1 0
三队 1 0 0 1 0


请问各位大侠:如何用最简单最快速的方法得出上述统计表?
 
建立一个临时表,用作检索用,一个单位字段就可以了。
把单位这字段的内容放进去,用 disin 的互斥参数,保证
这个表里面只有不同的单位的名称,然后读这个表,逐条记录作为统计的条件,
分别做统计。
 
粗一看似乎可以用CASE来做。。。
 
SELECT 单位, count(*) AS 人数, (select count (*) from Query1 where 单位=table1.单位 and 表现="优秀" ) AS 优秀
FROM Query1 AS table1
GROUP BY 单位
ORDER BY 单位

不是真的用汉字字段名吧?
 
请SUNwork,吴剑明具体一下好吗!
killgates:是真的,全部用中文字段,80多个呢!
 
Select 单位 As 队别,Count(姓名) As 人数,
Sum(Case When 表现='优秀' Then 1 Else 0 End) As 优秀,
Sum(Case When 表现='一般' Then 1 Else 0 End) As 一般,
Sum(Case When 表现='良好' Then 1 Else 0 End) As 良好,
Sum(Case When 表现='较差' Then 1 Else 0 End) As 较差
From Table1
Group By 单位
Order By 单位
 
Select 单位 队别,Count(*) 人数,
Sum(decode(表现,'优秀',1,0)) 优秀,
Sum(decode(表现,'良好',1,0)) 良好,
Sum(decode(表现,'一般',1,0)) 一般,
Sum(decode(表现,'较差',1,0)) 较差
From Table1
Group By 单位

在oracle8中运行正常,能得到需要结果,打印可以用quickreport或调用f1book1。
 
多人接受答案了。
 

Similar threads

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