数值相加

wzsjzjjxy 2011-03-04 10:53:43
我有个报表,其中有明细项,也有小计项(某个明细项运算得到),而运算法则存储在另一个表里,比如小计项编号为20,则该表存储的信息是 20,18,16,3,+,- 意思就是说20=18+16-3
我现在是用游标处理的。
declare @Total Numeric(19,2)
declare @Value Numeric(19,2)

declare @param_1 int,@param_2 int, @param_3 int, @param_4 int, @param_5 int, @param_6 int, @param_7 int, @param_8 int
, @param_9 int, @param_10 int, @param_11 int, @param_12 int, @param_13 int, @param_14 int, @param_15 int, @param_16 int
, @param_17 int, @param_18 int, @param_19 int, @param_20 int
,@op_1 nvarchar(2),@OP_2 nvarchar(2), @OP_3 nvarchar(2), @OP_4 nvarchar(2), @OP_5 nvarchar(2), @OP_6 nvarchar(2), @OP_7 nvarchar(2), @OP_8 nvarchar(2)
, @OP_9 nvarchar(2), @op_10 nvarchar(2), @op_11 nvarchar(2), @op_12 nvarchar(2), @op_13 nvarchar(2), @op_14 nvarchar(2), @op_15 nvarchar(2), @op_16 nvarchar(2)
, @op_17 nvarchar(2), @op_18 nvarchar(2), @op_19 nvarchar(2)

declare cur cursor for --定义游标,获取公式及合计项--使用中间表@temp_year
select catid,name
,param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10
,param_11,param_12,param_13,param_14,param_15,param_16,param_17,param_18,param_19,param_20
,OP_1,OP_2,OP_3,OP_4,OP_5,OP_6,OP_7,OP_8,OP_9,OP_10
,OP_11,OP_12,OP_13,OP_14,OP_15,OP_16,OP_17,OP_18,OP_19
from ofrc where subsum='Y' and templateid=18 and param_1>0
order by catid

open cur
fetch next from cur into @ID,@Name,@param_1,@param_2, @param_3, @param_4, @param_5,@param_6,@param_7,@param_8
,@param_9, @param_10, @param_11, @param_12, @param_13, @param_14, @param_15, @param_16
,@param_17, @param_18, @param_19, @param_20,@op_1,@OP_2,@OP_3,@OP_4,@OP_5,@OP_6,@OP_7,@OP_8
,@OP_9,@op_10,@op_11,@op_12,@op_13,@op_14,@op_15,@op_16,@op_17,@op_18,@op_19


while @@fetch_status=0
begin
set @Total=0 --初始化变量值
set @Value=0

set @value=(select isnull(balance,0) from cfw1 where catid=@parem_1)
set @total=@value

if @op_1 is not null
begin
set @value=(select isnull(balance,0) from cfw1 where catid=@parem_2)
set @total=@total+@op_1+@value
end


其中@param带头代表我说的例子中的18,16,3 @op打头的变量存放的是运算符

if @op_1 is not null
begin
set @value=(select isnull(balance,0) from cfw1 where catid=@parem_2)
set @total=@total+@op_1+@value
end
现在问题是,我获得运算符之后,存放在变量中,如何用这个运算符连接两个变量??set @total=@total+@op_1+@value
这样肯定是不对的。
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzsjzjjxy 2011-03-04
  • 打赏
  • 举报
回复
也不行啊。[Quote=引用 3 楼 rucypli 的回复:]
declare @Total varchar(100)
[/Quote]
rucypli 2011-03-04
  • 打赏
  • 举报
回复
declare @Total varchar(100)
wzsjzjjxy 2011-03-04
  • 打赏
  • 举报
回复

你好,我测试结果有误

declare @Total Numeric(19,2)
declare @Value Numeric(19,2)
declare @op varchar(2)
DECLARE @sql varchar(100)
set @total=10
set @value=10
set @op='+'
----SET @TOTAL=@TOTAL+@OP+@VALUE
--set @sql=CONVERT(VARCHAR(10),@total)+@op+CONVERT(VARCHAR(10),@value)
--print @sql
--EXEC (@SQL)
set @total=ltrim(@total)+ltrim(@op)+ltrim(@value)
print @total
提示从数据类型 varchar 转换为 numeric 时出错。
你去掉空格是什么意思?@total是数值,@op是字符型(加减乘除符号) 肯定不能相加啊?

[Quote=引用 1 楼 wxf163 的回复:]
SQL code
set @total=ltrim(@total)+ltrim(@op_1)+ltrim(@value)
print @total
[/Quote]
王向飞 2011-03-04
  • 打赏
  • 举报
回复
set @total=ltrim(@total)+ltrim(@op_1)+ltrim(@value)
print @total

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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