求助:关于SQL查询的实现(50分)

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

yao99

Unregistered / Unconfirmed
GUEST, unregistred user!
请问下面的查询结果可否用select实现(注:单位名称为一个数据表、学生姓名和成绩为
一个数据表,他们通过单位代码关联)
单位名称 学生姓名 成绩
单位1 aa 70
bb 71
cc 72
单位2 dd 73
ee 74
ff 75
 
select 单位.单位名称,学生姓名,成绩 from 单位,学生 where 单位.单位名称=学生.单位名称
结果为
单位名称 学生姓名 成绩
单位1 aa 70
单位1 bb 71
单位1 cc 72
单位2 dd 73
单位2 ee 74
单位2 ff 75
 
不可以,但是你可以选择出类似于
学生ID 单位名称 学生姓名 成绩
1 单位1 aa 70
2 单位1 bb 71
3 单位1 cc 72
4 单位2 dd 73
5 单位2 ee 74
6 单位2 ff 75
这样是一个视图,然后做报表~
按照单位来分组,这样就可以了
 
结果可以实现, 不过输出相同样式比较麻烦.
 
这不是我要的结果,我希望屏蔽单位名称重复的纪录,像我给的例子那样
 
有没有办法,既然说麻烦的话,说明可以实现了,望赐教
 
这是一个常识性的问题,你见过sql语句返回的数据有这种格式的吗?(如果字段值不为空)?
如果你一定要实现这个结果可以
1,用两个query
2,用临时表(可能更加麻烦)
create temptab as select..... order by [单位名称];
然后一条一条地update temptab set [单位名称]=''
 
查一下有这样的例子
 
表结构
dw dwid name
1 单位1
2 单位2
cj
id dwid name cj
1 1 aa 70
2 1 bb 71
3 1 cc 72
4 2 dd 73
5 2 ee 74
6 2 ff 75
select case
when (select count(id) from cj where dwid=b.dwid and id<=b.id)=1 then
a.name else
'' end ,
b.name,b.cj//b.dwid,b.id,
from dw a left join cj b
on a.dwid=b.dwid
order by b.dwid,b.id
//显示的时候不显示 b.dwid,b.id
 
select case
when (select count(学生姓名) from cj where 单位名称=b.单位名称 and 学生姓名<=b.学生姓名)=1 then
a.单位名称 else
'' end ,
b.学生姓名,b.成绩
from dw a left join cj b
on a.单位名称=b.单位名称
order by b.单位名称,b.学生姓名
 
楼上说的没错。但也可以在打印报表时候处理。
 
接受答案了.
 
后退
顶部