请帮忙,一个不复杂的问题。(50分)

  • 主题发起人 主题发起人 hcl
  • 开始时间 开始时间
to:Brave
这样的代码在D5中可以运行吗?我度一下,老提示‘[Error] Unit1.pas(234): ')' expected but identifier 'sql' found’
可不可用CASE参数能。
 
那是程序的错误,不是SQL不能执行,不信你在SQL explore中执行一下.
把你的程序贴出来吧
 
hcl兄:
我说重新设计表的目的不是为了去解决你这个查询而去重新设计表
而是因为你这个表问题太多了
比如:有数据冗余,可能造成数据不一致啊等等
 
to:yxyyyy
我对你的问题有兴趣,请详细一点说。
 
应该是这样的思路, 没测试, 以前是这么用的. case when 语句不同的数据库不一样
有的数据库不支持, 但是可以用相应的函数代替.
select name,
sum(case when rmemo = '出勤' then ts else 0 end),
sum(case when rmemo = '出差' then ts else 0 end),
sum(case when rmemo = '请假:事假' or rmemo = '请假:病假' then ts else 0 end),
sum(case when rmemo = '缺勤' then ts else 0 end)
from Tmptj
group by name
 
我的程序如下:
procedure TForm1.Button6Click(Sender: TObject);
var bb1,bb2,bb3,bb4:string;
begin
bb1:='出勤';
bb2:='出差';
bb3:='请假%';
bb4:='缺勤';
with query2 do begin
Close;
Sql.Clear;
sql.Add('select distinct name,'
sql.add('(select sum(ts) from tmptj where RMEMO=:aa1) as ts1,');
sql.add('(select sum(ts) from tmptj where rmemo=:aa2) as ts2,');
sal.add('(select sum(ts) from tmptj where rmemo=:a4)as ts4');
sql.add('from tmptj');
ParamByName('aa1').asstring:=bb1;
ParamByName('aa2').asstring:=bb2;
// ParamByName('aa3').asstring:=bb3;
ParamByName('aa4').asstring:=bb4;
open;
end;
 
Sql.Clear;
sql.Add('select distinct name,'
sql.add('(select sum(ts) from tmptj where RMEMO=:aa1) as ts1,');
这一段错了,应该是
Sql.Clear;
sql.Add('select distinct name,');
sql.add('(select sum(ts) from tmptj where RMEMO=:aa1) as ts1,');



如果想用case在Access中不支持,用iif(field=0,null,field)
 
hcl兄:
有关数据库设计要说的东西太多了,这里就你这个数据库简单的说一下
([8D][8D]主要是复杂的说,我也说不出[:D][:D])
1。你想想看如果发现李先生实际上是王小姐(或是说公司突然将[red]缺勤
[/red]改称为[red]XX[/red])要改正过来那么要涉及的数据改动有多大
2。数据不一致的隐患:
你在数据库中存有那么多的李小姐,你能保证同为李小姐的数据都一致吗?
………………
如果是我数据库可能会被设计成这样
t_user(userID,userName,……)
t_action(actionID,actionName,.....)
t_work_attendance(userID,actionID,times,....)

[8D][8D][8D]见笑了

 
TO:yxyyyy
你说的是这个问题。
其实,我提的问题也是一个自己随便临时写的,在程序中的数据库中有40多个表呢?
谢谢的回答。原来是虚惊一场。
 
你好,我给你发邮件了,你看看!
 
to:Brave
这与我的代码不是一样吗?
 
原来是这样啊,害的我瞎忙呼
[^][^][^]
 
to:eric.youbin
原代码呢?这样等于没解决,请速发原代码过来参考。
谢了。
 
好的,不过时间仓促,我觉得还有优化的余地,麻烦你修改!
 
你注意看了吗?你的语法错了
Sql.Clear;
sql.Add('select distinct name,'
sql.add('(select sum(ts) from tmptj where RMEMO=:aa1) as ts1,');
这一段错了,应该是
Sql.Clear;
sql.Add('select distinct name,[red]');[/red]
sql.add('(select sum(ts) from tmptj where RMEMO=:aa1) as ts1,');
 
to:Brave
不好意思,是我贴错,程序中没有这样的错误。
谢谢的支持。
 
TO:eric.youbin
谢了,你的好东东收到。我正在测试。
等我一下给大家加分。
 
多人接收答案
 
to : hcl
"""TO:eric.youbin
你好这问题很简单吗?
有料的写一段代码出来给大家看一看,如能解决此问题一定加高分。
如果你是无能的话,请你离开。
祝你走好!
"""我怎么没看到加分??(更不用说高分了![:(][:(!])
 
TO:eric.youbin老兄啊,你的处理方案不是很好?又有点不愿帮人的感觉。
你让我怎么给你加高分。你的方案实在不能和(Brave)比。
好了,下一次积极一点,一定有你的好处的。做事都有因果关系的。
让不要抱怨自己,也不要抱怨我。上帝是公平的。
祝福你!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部