2016-10-20 18 views
7

Bulmaca benzersiz çiftleri seçmektir. Aşağıdaki örnekte sözdizimi ben sql benzersiz kayıtlar bulmaca

Çıktı olmalıdır bana üç kayıtları

vermesi gereken, sadece ne olursa olsun sipariş a, b eşsiz çiftleri almak gerekir
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. 

Mssql

içindir

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

Fikirlerim tükendi ve yardım için minnettarım:

cevap

3
select  distinct 

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

from  @t 
; 
10

tek yönlü (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

Bunun için talep etmedi, ama bu yani her zaman var olan bir satır dönmek, sütunların sırasını koruyacak: Bir `emri by` yoksa

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

Sipariş asla garanti fıkra. –

+0

@ShannonSeverance: burada 'order' sütunların sırasını, yani sadece' (5,1) 'diğer çözümlerin döneceğini (1,5)' (yani) bulunmadığı anlamına gelir. Cevabımı düzenledim. – dnoeth