在Sql Server上选择Query

时间:2015-05-18 11:30:55

标签: sql sql-server-2008

问题可能很简单,但我不知道如何解决它,

我有这个表结构

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个值。 我希望我解释得很好,谢谢

3 个答案:

答案 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