CREATE TABLE #A (name char(1), value int)
INSERT #A('A', 1)
INSERT #A('B', 2)
INSERT #A('C', 5)
INSERT #A('D', 9)
INSERT #A('E', 10)
INSERT #A('F', 10)
用一条SELECT语句,返回以下结果:
不存在其它任何记录,使得两者Value相减绝对值小于2。或者如果存在其它记录,使得两者Value相减绝对值小于2,取其中Value较小的那条结果为 
A 1
C 5
D 9

解决方案 »

  1.   

    CREATE TABLE #A (name char(1), value int)
    GOINSERT into #A values('A', 1)
    INSERT into  #A values('B', 2)
    INSERT  into #A values('C', 5)
    INSERT into  #A values('D', 9)
    INSERT  into #A values('E', 10)
    INSERT  into #A values('F', 10)
    GO
    select distinct a.* from #A a left join #A b on abs(a.value-b.value)<=2 where a.name<>b.name and  a.value<b.value
    --or
    select * from #A a where exists(select 1 from #A b where a.name<>b.name and  a.value<b.value and abs(a.value-b.value)<=2)
    /**
    name value       
    ---- ----------- 
    A    1
    D    9(所影响的行数为 2 行)
    **/
      

  2.   

    自己测出来了,上网机器没有SQL环境,不保证下面的语句一定通过,但基本思路差不多
    SELECT * FROM #A T 
    WHERE value = (SELECT MIN(value) FROM #A WHREE ABS(value, T.value) < 2)