变换表字段(100分)

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

xll

Unregistered / Unconfirmed
GUEST, unregistred user!
有一张表AA ,格式如下:

部门 处室 津贴
A 1 科 100
A 2 科 150
B 1 科 200
B 2 科 100
B 3 科 180


想转换成下一种格式的表 BB

部门 津贴总额 津贴1 津贴2 津贴3
A 250 100 150 0
B 480 200 100 180

这里,津贴1..n 指各处室的津贴

如何由 AA 转换成 BB,建临时表循环插入记录的方法不考虑,谁有好办法?

 
用sql

alter table aa add (fieldname fieldtype) modify (fieldname fieldtype)
 

新建的表BB当然是空的。而你又不允许“循环插入记录的方法”

我看没人能答上。

降低点要求吗?
 
做一个 query ,放入能生成结果的SQL语句,然后用一个 Batchmove 组件,设为
Mode = batCopy 试试,关键是怎么写这个 SQL 语句,这个我还想出来,呵呵
 
如果有能够生成结果的SQL语句,batchmove是多余.
 
降低点要求允许“循环插入记录的方法”好不好。

用SQL难写。在这里用Table好象容易些。

先创建表bb Table2 ("津贴总额"定义为“计算字段”)

对表1的“部门”分别进行过滤

(如:过滤出“部门”=a 的记录。)
Table1.first; //(已过滤)
Table2.append;
while not Table1.eof do
begin
Table2.fieldByName('部门').AsString:=
Table1.fieldByName('部门').AsString ;
for I:=1 to Table1.RecordCount do
//从津贴“1” 到 津贴“Table1.RecordCount”
begin
Table2.fieldByName('津贴'+IntToStr(I)).value:=
Table1.fieldByName('津贴').value;
end;

Table2.refresh;
Table1.next;
end;
//过滤下一个“部门”=b 的记录。

end;//end while


注:'津贴'+IntToStr(I)是很有意思的一段
请好好研究一下。

以上代码基本上是我以前做一个“医院...系统”中将
“各科前十位疾病转横排后做报表打印”用到的一个技巧。

科别 病名 人数 科别 病名1 人数1 病名2 人数2 ..........
1 aaa 18 1 asd 29 aaa 18
1 asd 29 ==> 2 fgd 35
2 fgd 35


 
黄耀彰:

应该说你的方法还行,但Table效率低,特别是在SERVER 上,与Query不能比!
 
后退
顶部