数据合并问题,急用! ( 积分: 200 )

  • 主题发起人 主题发起人 li99106
  • 开始时间 开始时间
L

li99106

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个问题请大家帮忙解决以下,数据和并汇总的!
表1结构:(注:评比类型就两项)
姓名 部门 评比类别 德 绩 能 总分
李明 售后 自评 4 5 6 15
李明 售后 上评 3 5 4 12
表2结构:
姓名 部门 自评得分 自评德 自评绩 自评能 上评得分 上评德 上评绩 上评能 总分
李明 售后 15 4 5 6 12 3 5 4
请问大家,我在Delphi里怎样能够实现!我想在急用!
 
把数据分成两个表,然后再关联就行了。
 
我是覺得你建立表的結構是不是有點問題,你的表結構如果改成這樣可能會更好一些吧
姓名 部门 自評德 自評績 自評能 上評德 上評績 上評能,
或者
select a.姓名,a.部门 ,a.评比类别 as 自评得分,a.德 as 自评德,a.绩 as自评绩,a.能as 自评能, b.评比类别 as 上评得分,b.德 as 上评德,b.绩 as上评绩,b.能as 上评能 from
(select * from 表1 where 評比類別='自評') a left join (select * from 表1 where 評比類別='上評') b on b.姓名=a.姓名 and b.部門=a.部門
 
这个你代码循环实现。
首先你使用一个adoquery1打开表1,分别读出李明的两个记录,然后可以使用另外一个adoquery2打开表2,按照对应的字段写入。
 
to:壁画
有没有事例?
 
假如你的数据库是sql server ,用sql语句即可达到你的目的:
select a.姓名,a.部门,a.总分 as 自评得分,a.德 as 自评德,a.绩 as 自评绩,a.能 as 自评能,b.上评得分,b.上评德,b.上评绩,b.上评能
from 表1 as a left join (select 姓名,总分 as 上评得分,德 as 上评德,绩 as 上评绩,能 as 上评能 from 表1 where 评比类别='上评') as b on a.姓名=b.姓名
where a.评比类别='自评'
 
我在delphi里,用代码怎么实现?
我能了几天也没搞好?[:(][:(]
 
一个表其实也是可以的,运用CASE方法
方法:数据库中加载一个存储过程(好处我就不说了),在IDE中调用这个存储过程即可。
CREATE POCEDURE GETDATA
AS
SELECT NAME,DEPART,(CASE '评比类别' WHEN '自评' THEN '总分')AS 自评得分,
(CASE '评比类别' WHEN '上评' THEN '总分')AS 上评得分 FROM 表1
(备注:省去的字段自己加)
GO
DELPHI 中
WITH ADOQUERY DO
BEGIN
CLOSE;
SQL.CLEARE;
SQL.ADD('GETDATA');
TRY
OPEN;
EXCEPT
EXECSQL;
END;
END;
 
to:slqbs-gy
要求要用两个表,设计就用两个不同表!
 
你的一个表已经完全可以满足你表2的结构了,为什么还要两个表呢??
 
你可以把查询出来的数据插入到表2中的哦
 
这是很简单的表连接问题,帮你搞定
insert into 表2 select * from
(select * from 表1 A inner join 表1 B on A.姓名=B.姓名
where A.评比类别 = '自评'and B.评比类别 = '上评')AS temp

注意,列的对应关系我没写,插入的时候两表列要对应.
 
to:w009
我在oracle 里运行报错,参数left在oracle 里不支持,请问怎样改进!
 
这怎么是左连接呢,根据题意应该是内连接,尽管左连接在此题中结果可能也是正确的,
但根据题意来应该是内连接.
 
to:lisongmagic
在oracle里怎样写这条语句!
 
如果用delphi的方法,用一个query选择表1的数据,然后循环:
while not 表1.EOF do
begin
判断表2是否存在姓名相同的记录;
存在:
根据表1.评比类型(自评、上评)更新表2
update 表2
不存在:
insert 表2(...)

表1.next
end;
 
to:bellhuang
能不能给段代码?我现在搞不定,急呀[:(][:(]
 
后退
顶部