我想根据我的列值进行算术运算.请考虑以下示例
CREATE TABLE #test
(
cont_sal INT,
check_value INT,
operator VARCHAR(50)
)
INSERT #test
VALUES (10,20,'+'),
(20,10,'+'),
(10,20,'-'),
(20,10,'-')
Run Code Online (Sandbox Code Playgroud)
预期结果:
cont_sal check_value result
-------- ----------- ------
10 20 30
20 10 30
10 20 -10
20 10 10
Run Code Online (Sandbox Code Playgroud)
我可以使用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
Run Code Online (Sandbox Code Playgroud)
但有没有办法动态地做到这一点.操作员可以像任何东西/
,%
,*
.像这样的东西
DECLARE @sql NVARCHAR(max)=''
SET @sql = 'select cont_sal …
Run Code Online (Sandbox Code Playgroud) 我想比较多个列,并在不同列之间获得最大值
对于三列,我提出了以下查询,该工作正常
SELECT CASE
WHEN col1 >= col2
AND col1 >= col3 THEN col1
WHEN col2 >= col1
AND col2 >= col3 THEN col2
WHEN col3 >= col1
AND col3 >= col2 THEN col3
ELSE col1
END AS Max_number
FROM (VALUES (1,2,3),
(1,2,3),
(1,2,3)) tc (col1, col2, col3)
Run Code Online (Sandbox Code Playgroud)
但是当我想要比较超过3列时,事情变得越来越复杂.有没有更简单的方法来做到这一点
考虑我有一个查询
select * from A
Except
select * from B
union all
select * from B
except
select * from A
Run Code Online (Sandbox Code Playgroud)
查询处理如下
select *
from
(
select * from A
Except
select * from B
) a
union all
(
select * from B
Except
select * from A
) b
Run Code Online (Sandbox Code Playgroud)
如何在sql中定义处理顺序.在任何情况下它都会这样处理吗?
select * from A
Except
select * from
(
select * from B
union all
select * from B
) a
except
select * from A
Run Code Online (Sandbox Code Playgroud)