如何在一个查询出来的表的一个字段中显示另一个查询的结果集。(100分)

  • 主题发起人 主题发起人 xinyu
  • 开始时间 开始时间
X

xinyu

Unregistered / Unconfirmed
GUEST, unregistred user!
例:
存在表1和表2:
表1:
StuNo:学生学号
StuNA:学生姓名
表2:
StuNo:学生学号
Chanese:语文成绩
English:英语成绩
Math:数据成绩

要求的查询结果显示:(仅有两列:StuNo 及 Grade,希望在DBGrid中显示)
StuNo Grade
001 语文:80,英语:90,数学:86
002 语文:76,英语:80,数学:80
。。。

请问各位大虾,该如何处理?
另外,如果表1与表2的关系是一对多的关系呢?也要求一个学生在查询结果中
只有一条记录。
100分送上。

 
select distinct(StuNo),
('语文:'+Chanese+' 英语:'+English+' 数据:'+Math) as grade
from table2
 
太容易了,有两种方法:
1。在 表一中添加新字段,设为从第二个表中 lookup 对应的字段就行了。
2。用 SQL :
Select table1.StuNo,table1.StuNa,table2.语文,table2.数学,table2.英语
from table1,table2
where table1.stuNo = table2.stuno
 
>>另外,如果表1与表2的关系是一对多的关系呢?也要求一个学生在查询结果中
>>只有一条记录。
一对多,还这样要求,有实际意义吗,是不是还有其他条件,如:最近日期之类的,
 
我也有和dedman相同的疑问.
Bird是SQL方法,Crab是对控件的处理,两种方式都可以得到结果,

to bird:
已注意数据类型的转换

to Crab:
Table1新增字段,置属性为 Calculated,
然后再Table1的OnCalcFields计算字段
Table1NewField.Value :=
format('语文: %3d, 英语: %3d, 数学: %3d',
[Table2Chinese.Value, Table2English.Value, Table3Math.Value])

何必非要一列显示呢,用Master/Detial更简单

 

各位 :

谢谢回答。

to slicker:

如果都是用TQUERY来做,是否也是一样的方法?

申明:非要一列显示是用户提出的要求,不是我想要的。
 
to xinyu:

实现方法大致分为三种:
1. 用 TTable 直接操作
2. 服务器端用SQL或TQuery用动态SQL实现,
使用Database component,不一定非要用OnCalcFields,也可以在AfterScroll中实现计算;

如果是SQL Server等数据库,建议在服务器端建立View,或使用三层结构

用户就向情人,你要顺着她,又不能全顺她,关键是双方要沟通

 
to slick:
最后我改用临时表做,效果不错,谢谢你。
 

Similar threads

后退
顶部