我编一个运算的程序,下面的[本期业务收入]有时是0,一运算后程序提示 遇到被0除的错误,这种问题得怎么屏蔽呢,我不知道怎么写屏蔽代码,请高手指教
with ADOQuery1 do
begin
close;
sql.Clear ;
sql.Add('select [id号], [名称]',);
sql.Add('[本期利润]/[本期业务收入] as 本期毛利率');
sql.Add('from _table');
open;
end;
with ADOQuery1 do
begin
close;
sql.Clear ;
sql.Add('select [id号], [名称]',);
sql.Add('[本期利润]/[本期业务收入] as 本期毛利率');
sql.Add('from _table');
open;
end;
SELECT [id号], [名称],
(CASE [本期业务收入]
WHEN 0 THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM _table
with ADOQuery1 do
begin
close;
sql.Clear ;
sql.Add('select [id号], [名称]',);
sql.Add('[本期利润]/[本期业务收入] as 本期毛利率');
sql.Add('from _table');
try
open;
except
on e: exception do
begin
ShowMessage('ADOQuery1运行出错: '+e.Message);
... //可以加入自定义处理过程.
end;
end; end;
我的写法是,[本期业务收入]有的是没填数的是空值
SELECT [id号], [名称],
(CASE isnull([本期业务收入],0)
WHEN 0 THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM _table
create table tt(id号 int,名称 varchar(20),本期利润 numeric(16,3),本期业务收入 numeric(16,3))insert into tt values(1,'dd',2033,200);
insert into tt values(2,'dda',2033,200);
insert into tt values(3,'dd22',23,0);
insert into tt(id号,名称,本期利润) values(4,'ddda',2033);SELECT [id号], [名称],
(CASE [本期业务收入]
WHEN 0 THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM tt1 dd 10.16500000000000000000
2 dda 10.16500000000000000000
3 dd22 .00000000000000000000
4 ddda NULL
得怎么显示字符呢我写完后,提示“不允许数据类型从varchar 到money 的隐形转换,请用convert函数来运行此查询”为什么会提示这个?
我的写法是,[本期业务收入]有的是没填数的是空值
SELECT [id号], [名称],
(CASE isnull([本期业务收入],0)
WHEN ''错误'' THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM _table
SELECT [id号], [名称],
(CASE convert(numeric(16,3),[本期业务收入])
WHEN 0 THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM ttSELECT [id号], [名称],
(CASE isnull([本期业务收入],0)
WHEN 0 THEN 0
ELSE [本期利润]/[本期业务收入]
END) as 本期毛利率
FROM tt
你只能这样写
SELECT [id号], [名称],
(CASE isnull([本期业务收入],0)
WHEN 0 THEN '错误'
ELSE cast([本期利润]/[本期业务收入] as varchar(30))
END) as 本期毛利率
FROM tt显示结果:
1 dd 10.16500000000000000000
2 dda 10.16500000000000000000
3 dd22 错误
4 ddda 错误