救命啊!救命!!。。。。。成本核算。。。。。

chrisDream 2004-07-19 04:28:05
要显示一个表(核算表)。从 配件表 中读取数据,配件表的
主要字段有:组件,单价,配件合计,合计,含税成本,FTYPE
(FTYPE 为组件的类型,包含A,B,。。。等数据)
要求:
1)当“组件”是 “A”或“B”时,单价显示0.000
2)当“组件”是 其他情况 时,单价显示为配件的具体价格
而且把“配件合计”的值置为 0.000
例如:(显示情况)

组件 单价 配件合计 合计 含税成本
A 0.000 100.00 100.00 100.00
B 0.000 50.00 50.00 50.00
.............................................
e 1.0 0.000 1.00 1.00
f 30.00 0.000 30.00 30.00

。。。哪位好心的大哥帮帮我了。。。
...全文
338 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pokemonFK 2004-07-20
  • 打赏
  • 举报
回复
query 中的afteropen :
IF dataset.FieldByName('ftype').Value = 'a' then
begin
dataset.FieldByName('fpprice').Value:= 0.000;
end;
IF dataset.FieldByName('ftype').Value = 'b' then
begin
dataset.FieldByName('fpprice').Value:= 0.000;
pokemonFK 2004-07-20
  • 打赏
  • 举报
回复
decode 好象不能用在SQLSERVER
chrisDream 2004-07-19
  • 打赏
  • 举报
回复
我用的是SQLSERVER2000。。
jinjazz 2004-07-19
  • 打赏
  • 举报
回复
你数据库表里是什么就select出来什么了,怎么还要分情况阿,要是这样还要数据库干什么
coolvc2002 2004-07-19
  • 打赏
  • 举报
回复
TADquery1.close;
TADquery1.SQL.Text := 'select 组件,' + #13#10 +
' decode(组件, ''a'', 0.0000, ''b'', 0.0000, u.单价) as 单价,' + #13#10 +
' decode(组件, ''a'', 0.0000, ''b'', 0.0000, u.配件合计) as 配件合计,' + #13#10 +
' 合计,' + #13#10 +
' 含税成本' + #13#10 +
' from 配件表 u' + #13#10 +
' where u.组件 = ''a'' or u.组件 = ''b''';
Tadoquery1.Open;
coolvc2002 2004-07-19
  • 打赏
  • 举报
回复
楼上的:

case
when ...;
else ...;
end

效率低,又不是标准的SQL语言,不提倡使用!

用:

select 组件,
decode(组件, 'a', 0.0000, 'b', 0.0000, u.单价) as 单价,
decode(组件, 'a', 0.0000, 'b', 0.0000, u.配件合计) as 配件合计,
合计,
含税成本
from 配件表 u
where u.组件 = 'a' or u.组件 = 'b'
chrisDream 2004-07-19
  • 打赏
  • 举报
回复
我不需要做插入啊,
我也没有核算表,我只是从“配件表”中获得数据,
加工之后,显示出来的,
我用的是ADOQUERY,
那么怎么写他的SQL。。。
taoff 2004-07-19
  • 打赏
  • 举报
回复
我的方法是可以的 你试试呀
coolvc2002 2004-07-19
  • 打赏
  • 举报
回复
coolvc2002(cool_vc) :
我要做的是显示数据,而不是插入数据啊。。。
我是要在DBGRID 中显示的啊

----------------------------------------------------

晕~~~,你可以在显示之前,调用那个插入的sql,
insert into 核算表
select 组件, 0.0000, 配件合计, 合计, 含税成本
from 配件表 u
where u.组件 = 'a' or u.组件 = 'b';

insert into 核算表
select 组件, 单价, 0.0000, 合计, 含税成本
from 配件表 u
where u.组件 <> 'a' and u.组件 <> 'b';


然后显示时,直接从:核算表 中取数据呀!

chrisDream 2004-07-19
  • 打赏
  • 举报
回复
我用的是SQLSERVER2000。。
taoff 2004-07-19
  • 打赏
  • 举报
回复
TADquery1.close;
TADquery1.SQL.clear;
TADquery1.sql.add('select a.组件,'+
' 单价=case a.组件'+
' when ''A'' Then 0.000'+
' when ''B'' Then 0.000'+
' Else a.单价'+
' End,'+
' 配件合计=case a.组件'+
' when ''A'' Then a.配件合计'+
' when ''B'' Then a.配件合计' +
' Else 0.000 '+
' End,a.合计, a.含税成本 from 配件表 a');
Tadoquery1.Open;
coolvc2002 2004-07-19
  • 打赏
  • 举报
回复
上面我给的sql效率是最高的,如果非要在一个语句中写出来,那如果是oracle的话,可以这样写(SQLServer 可以替换掉decode 函数,如果是Access 的话,那我也没招了哦^_^):

select 组件,
decode(组件, 'a', 0.0000, 'b', 0.0000, u.单价) as 单价,
decode(组件, 'a', 0.0000, 'b', 0.0000, u.配件合计) as 配件合计,
合计,
含税成本
from 配件表 u
where u.组件 = 'a' or u.组件 = 'b';
chrisDream 2004-07-19
  • 打赏
  • 举报
回复
coolvc2002(cool_vc) :
我要做的是显示数据,而不是插入数据啊。。。
我是要在DBGRID 中显示的啊
coolvc2002 2004-07-19
  • 打赏
  • 举报
回复
先执行sql:

insert into 核算表
select 组件, 0.0000, 配件合计, 合计, 含税成本
from 配件表 u
where u.组件 = 'a' or u.组件 = 'b';

insert into 核算表
select 组件, 单价, 0.0000, 合计, 含税成本
from 配件表 u
where u.组件 <> 'a' and u.组件 <> 'b';

然后:
select * from 核算表
chrisDream 2004-07-19
  • 打赏
  • 举报
回复
taoff(阿飞) :能不能具体点,我想写在QUERY中啊,
最好是一条SQL语句。。
taoff 2004-07-19
  • 打赏
  • 举报
回复
select a.组件,
单价=case a.组件
when 'A' Then 0.000
when 'B' Then 0.000
Else a.单价
End,
配件合计=case a.组件
when 'A' Then a.配件合计
when 'B' Then a.配件合计
Else 0.000
End,
a.合计,
a.含税成本
from 配件表 a
jian23cn 2004-07-19
  • 打赏
  • 举报
回复
看起来好像很简单,但我还是不懂◎_◎

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧