CREATE  TABLE tb(I INT)
INSERT  tb SELECT cast((rand(checksum(newid()))*100) as int) AS I  FROM master..spt_values
WHERE TYPE='P'AND number  <=100
环境如上  
要的结果是:用一个select语句求出两个相加等50的数 
补充说明:42  8  与8  42  是相同的 只需显示其中一个

解决方案 »

  1.   

    WITH C
    AS
    (SELECT 
    cast((rand(checksum(newid()))*100) as int) AS I  
    FROM master..spt_values
    WHERE TYPE='P'AND number  <=100
    )
    SELECT * FROM C AS a,C AS b WHERE a.I+b.I=50
      

  2.   

    WITH C
    AS
    (SELECT 
    cast((rand(checksum(newid()))*100) as int) AS I  
    FROM master..spt_values
    WHERE TYPE='P'AND number  <=100
    )
    SELECT * FROM C AS a,C AS b WHERE a.I+b.I=50 AND a.i<b.i
      

  3.   

    select * from tb a where exists(select 1 from tb where i+a.i=50 and I<>a.i)
      

  4.   

    生成的數字有可能重復最好在用distinct 或 group by 過濾
      

  5.   

    INSERT  tb SELECT cast((rand(checksum(newid()))*100) as int) AS I  FROM master..spt_values
    WHERE TYPE='P'AND number  <=100select * from tb a where exists(select 1 from tb where i+a.i=50 and I<>a.i)
      

  6.   

    CREATE  TABLE tb(I INT)
    INSERT  tb SELECT cast((rand(checksum(newid()))*100) as int) AS I  FROM master..spt_values
    WHERE TYPE='P'AND number  <=100select distinct * from tb a,tb b where  b.I+a.i=50 and b.I<a.idrop table tb /*I           I
    ----------- -----------
    26          24
    27          23
    28          22
    29          21
    31          19
    33          17
    34          16
    35          15
    36          14
    37          13
    38          12
    42          8
    44          6
    45          5
    49          1
    50          0(16 行受影响)*/
      

  7.   

    SELECT A.I, 50-A.I FROM TB A
    INNER JOIN TB B
    ON A.I + B.I = 50
    AND A.I <= 50/2
    GROUP BY A.I