2012-10-17 11 views
5

Dire che ho di input in questo modo:recuperare file di 1 ° colonna sulla base di dati comuni sulla seconda colonna

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

voglio recuperare tutte le righe della prima colonna che ha entrambi i 0080 e 0010 dati in seconda colonna. risultato sarà simile a questo:

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

Dal risultato possiamo vedere che prima colonna non includere 25 al 25 ha solo 0010 nel 2 ° colonna, e lo stesso per 34, che ha solo 0080 nel 2 ° colonna.

Ho provato a utilizzare la query nidificata, ma sta diventando molto lenta poiché la mia tabella è molto grande (contiene circa 30.000+ righe). Sto cercando una tecnica intelligente che sia più veloce per la grande tabella di dati.

+0

selezionando distinti 1st colonne e controllo secondo con cui sembra l'unica soluzione ragionevole per me. – jt234

risposta

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

Restituisce solo una riga per valore col1, non tutto come richiesto –

+1

Hai ragione. Corretto –

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

Ciò restituisce anche solo una riga per il valore col1, non tutto come richiesto. –

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 
Problemi correlati