2016-10-20 16 views
7

パズルはユニークなペアを選択することです。私は関係なく、出力はSQL固有のレコードパズル

(1,2),(1,3),(5,6) 

である必要があり、私に3つのレコード

を与えるべき順序A、B、のユニークなペアを取得する必要があり、次の例の構文は、MSSQL

declare @t table (a int, b int) 

insert into @t (a,b) values (1,2) 
insert into @t (a,b) values (2,1) 
insert into @t (a,b) values (1,3) 
insert into @t (a,b) values (3,1) 
insert into @t (a,b) values (5,6) 


select * from @t -- it outputs 5 records. 

のためであります私は考えがなくなり、助けに感謝します:)

答えて

3
select  distinct 

      case when a<b then a else b end 
      ,case when a<b then b else a end 

from  @t 
; 
10

片道(demo)は

SELECT DISTINCT v.a, 
       v.b 
FROM @t 
     CROSS APPLY (VALUES(a,b), 
          (b,a)) v(a, b) 
WHERE v.a <= v.b 
3

あなたがそれを要求しなかったが、これはつまり、常に既存の行を返す、列の順序を保持します:あなたは `順by`を持っていない限り

select a,b 
from @t as t1 
where not exists(
    select * from @t as t2 
    where t1.a = t2.b 
    and t1.b = t2.a 
    and t1.a > t2.a 
); 
+0

順序が保証されることはありません句。 –

+0

@ShannonSeverance:ここで 'order'は列の順序を意味します。つまり、'(5,1) 'だけが存在する場合、他の解は存在しない'(1,5) 'を返します。私の答えを編集しました。 – dnoeth