财管家 首页
当前位置:主页>delphi7/进销存和数据库> 文章内容

通用数据格式转换-请大伙务必帮忙

发布时间:2011-01-04 | QQ免费站
1楼: 将格式为
|姓名|课程|成绩|
的表格转换为
姓名 课程1成绩, 课程2成绩, 课程3成绩,......,课程n成绩
例如:
姓名 课程 成绩
张三 语文 98
张三 数学 87
张三 英语 32
李四 语文 65
李四 数学 65
李四 英语 57
转化为
姓名 语文 数学 英语
张三 98 87 32
李四 65 65 57

2楼: a 为原来的表格 b 为转换后的表格
var i integer;
s:string;
begin
adoquery1.sql.text := 'create table b (姓名 varchar(8))';
adoquery1.execsql;
adoquery1.close;
adoquery1.sql.text := 'select 课程 from a group by 课程';
adoquery1.open;
for i:= 0 to adoquery1.columns.count - 1 do
begin
adoquery2.sql.text :=Format( 'alter table b add %s integer',[adoquery1.columns[i].fieldname]);
adoquery2.execsql;
adoquery2.close;
end
以上是生成b表格,未通过测试,你自己调试一下

3楼: 用临时表吧

4楼: 应该不难啊,也可以使用游标。但能不能用一条sql语句实现就不知道了

5楼: 续:
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.sql.text := 'update b set %s =%s where 姓名=''%s''';


adoquery2.sql.text := format(adoquery2.sql.text,
[adoquery1.fieldbyname('课程').asstring,
adoquery1.fieldbyname('成绩).asstring,
adoquery1.fieldbyname('姓名').asstring,

]);
adoquery2.execsql;
adoquery2.close;
adoquery1.next;
end;
adoquery1.close;
showmessage('ok');

以上是将a表的数据导到b表,希望对你有帮助

6楼: 谢谢你 caiyiming,你能帮我调一下吗? adoquery1.columns[i].fieldname中的columns没有这个属性呀,我试了半天也没调出来. 请多多帮忙.如 管家婆进销存免费下载

7楼: 经典的行转列问题

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2054531
标题: 请教一个SQL语句子中行列转换的问题 (200分)

8楼: adoquery1.fields[i].text

9楼: 不用这么麻烦吧?
select * from
(select 姓名,成绩 as 语文 from table where 课程='语文') a left join
(select 姓名,成绩 as 数学 from table where 课程='数学') b on a.姓名=b.姓名
left join
(select 姓名,成绩 as 英语 from table where 课程='英语') c on a.姓名=c.姓名
.....
where xxxxx

10楼: 感谢你caiyiming,在你的启发下我已经调出了程序.也同样感谢这么多关心我的朋友,我需要的是一个通用的转换方法.我举的例子只是一个特例,所以我感觉caiyiming的比较适合我,在一次谢谢大伙的帮助.如果那位朋友有更加简单实用的方法,我愿意向他请教.我的qq:232277276