【发布时间】:2016-05-21 22:03:15
【问题描述】:
我想根据我的列值进行算术运算。考虑下面的例子
CREATE TABLE #test
(
cont_sal INT,
check_value INT,
operator VARCHAR(50)
)
INSERT #test
VALUES (10,20,'+'),
(20,10,'+'),
(10,20,'-'),
(20,10,'-')
预期结果:
cont_sal check_value result
-------- ----------- ------
10 20 30
20 10 30
10 20 -10
20 10 10
我可以使用CASE 语句来做到这一点。
SELECT cont_sal,
check_value,
CASE
WHEN operator = '+' THEN cont_sal + check_value
when operator = '-' THEN cont_sal - check_value
END result
FROM #test
但是有没有办法动态地做到这一点。运算符可以是 /,%,*。像这样的
DECLARE @sql NVARCHAR(max)=''
SET @sql = 'select cont_sal ' + 'operator'
+ ' check_value from #test '
--PRINT @sql
EXEC Sp_executesql
@sql
这显然没有用说
消息 102,级别 15,状态 1,第 1 行附近的语法不正确 'check_value'。
【问题讨论】:
-
使用
CASE表达式。这将是最简单的推理。 -
你的意思是
SET @sql = 'select cont_sal ' + @op + ' check_value from #test '.. -
@Mini - 每行都有自己的运算符,所以我们不能使用变量
标签: sql sql-server tsql sql-server-2012