2012-10-17 21 views
5

böyle girdi olduğunu varsayalım:2 sütun üzerinde ortak verilere dayalı 1 sütunun satır almak

1st column ---------2nd column 
23 ---------------------- 0080 
23 ---------------------- 0010 
23 ---------------------- 0080 
25 ---------------------- 0010 
25 ---------------------- 0010 
34 ---------------------- 0080 
27 ---------------------- 0010 
27 ---------------------- 0080 

Ben 2 sütunda hem 0080 ve 0010 verilerine sahip 1 sütunun tüm satırları almak istiyorum. sonuç böyle olacaktır: o 1 sütun yalnızca 0080 2 sütunda olan tek 0010 2 sütunda ve aynı için 34 sahiptir 25 25 olarak içermez görebilirsiniz sonucu itibaren

1st column--------- 2nd column 
23 ---------------------- 0080 
23 ---------------------- 0010 
23 ---------------------- 0080 
27 ---------------------- 0010 
27 ---------------------- 0080 

.

Yuvalanmış sorguyu kullanmayı denedim, ancak tablom çok büyük olduğu için çok yavaş oluyor (yaklaşık 30.000'den fazla satır içeriyor). Büyük veri tablosu için daha hızlı olan akıllı teknik arıyorum.

+0

ayrı 1 sütunları seçme ve bana tek mantıklı çözüm gibi görünüyor nerede ile 2'nci kontrol ediyor. – jt234

cevap

4
select * from your_table 
where col1 in 
(
    select col1 
    from your_table 
    where col2 in ('0080', '0010') 
    group by col1 
    having count(distinct col2) = 2 
) 
+1

Bu, col1 değeri başına yalnızca bir satır döndürür, gerektiği gibi değil –

+1

Doğru konum. Düzeltildi. –

0
select first 
from t 
where second in ('0080', '0010') 
group by first 
having count(distinct second) = 2 
+0

Bu, gerektiği kadar değil, yalnızca col1 değeri başına yalnızca bir satır döndürür. –

0
SELECT t.Col1,t.Col2 
    FROM dbo.YourTable t 
    JOIN(
    SELECT Col1, 
     MAX(CASE WHEN Col2 = '0010' THEN 1 ELSE 0 END) Has0010, 
     MAX(CASE WHEN Col2 = '0080' THEN 1 ELSE 0 END) Has0080 
     FROM dbo.YourTable 
     GROUP BY Col1 
)FilterTbl f 
    ON t.Col1 = f.Col1 AND f.Has0010 = 1 AND f.Has0080 = 1 
İlgili konular