2012-10-17 5 views
5

Say mam wejście tak:odzyskać rzędy 1 kolumna oparte na wspólnych danych na 2 kolumny

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

Chcę pobrać wszystkie wiersze 1 kolumna, która ma zarówno 0080 i 0010 dane w 2 kolumny. wynik będzie tak:

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

Od rezultacie widzimy, że 1 kolumna nie obejmuje 25 a 25 ma tylko 0010 w 2 kolumnie, a samo za 34, który ma tylko 0080 w 2 kolumny.

Próbowałem użyć zapytania zagnieżdżonego, ale staje się ono bardzo powolne, ponieważ moja tabela jest bardzo duża (zawiera około 30 000 wierszy). Szukam inteligentnej techniki, która jest szybsza w przypadku dużych tabel danych.

+0

wybierając różne 1st kolumny i sprawdzanie 2nd z którym wydaje się, że jedynym rozsądnym rozwiązaniem dla mnie. – jt234

Odpowiedz

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

Powoduje to zwrócenie tylko jednego wiersza na wartość col1, nie wszystkie zgodnie z wymaganiami –

+1

Masz rację. Poprawiono to. –

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

Powoduje to również zwracanie tylko jednego wiersza na wartość col1, a nie wszystkie jako wymagane. –

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 
Powiązane problemy