问题可能很简单,但我不知道如何解决它,
我有这个表结构
sno left Right
1 2 1
2 2 2
3 1 2
4 3 1
5 2 4
6 7 1
7 2 8
如何获得如下所示的结果集
sno left Right Result
1 2 1 1
2 2 2 2
3 1 2 1
4 3 1 1
5 2 4 2
6 7 1 1
7 2 8 2
我想选择数据两列之间匹配的最小值
例如:3 and 1
1是这两者之间的最小值,1与3匹配,因此匹配值为1.
例如:2 and 4
2是这两者之间的最小值,2是与4匹配,因此匹配值为2.
编辑:
如果选择8和2,例如
8包含( 1,2 ,3,4,5,6,7,8)
2包含( 1,2 )
所以结果 2
因为这里匹配了2个值。 我希望我解释得很好,谢谢
答案 0 :(得分:2)
以下SQL将返回左右值之间的减法运算的正值 - 在以Result作为标题的列中。它将计算左右值之间的差异 - ABS将使结果为正。
SELECT
sno,
left,
Right,
ABS(left - right) AS Result
FROM tablename
答案 1 :(得分:1)
case
when left < right then left
else right
end
答案 2 :(得分:1)
可能的解决方案之一:
DECLARE @t TABLE ( sno INT, l INT, r INT )
INSERT INTO @t
VALUES ( 1, 2, 1 ),
( 2, 2, 2 ),
( 3, 1, 2 ),
( 4, 3, 1 ),
( 5, 2, 4 ),
( 6, 7, 1 ),
( 7, 2, 8 )
SELECT *,
(SELECT MIN(v) FROM (VALUES(l),(r)) m(v)) AS m
FROM @t
输出:
sno l r m
1 2 1 1
2 2 2 2
3 1 2 1
4 3 1 1
5 2 4 2
6 7 1 1
7 2 8 2