2013-05-07 20 views
7

Questo è il mio tavolo:Come recuperare la stessa colonna due volte con condizioni diverse nella stessa tabella?

Anganbadi_ID    Food  Month 
-------------------------------------------  
1165      हाँ   1 
1165      हाँ   2 
1165      हाँ   4 
1168      हाँ   4 
2032      नहीं  4 
2218      नहीं  4 
2219      हाँ   4 
2358      नहीं  4 
2546      हाँ  10 

ci sono 4 colonne Anganbadi_ID, Food, Month, Year e voglio confrontare Food colonna due volte sulla base di due differenti valori mese.

ad es. se seleziono Mese = 4 per il primo alimentare (1-Food) colonna e Month = 10 per la colonna secondo alimentari (Food-2), allora dovrebbe essere come segue ::

Anganbadi_ID   Food-1  Food-2  
------------------------------------------  
1165      हाँ   NULL 
1168      हाँ   NULL 
2032      नहीं  NULL 
2218      नहीं  NULL 
2219      हाँ   NULL 
2358      नहीं  NULL 
2546      NULL  हाँ 

Quando sto provando questo codice

SELECT  
    Anganbadi_ID, Food, 
    (SELECT Food 
    FROM Anganbadi AS Anganbadi_2 
    WHERE (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) 
     AND (Anganbadi_1.Month = 10) 
    ) AS 'Food(2)' 
FROM Anganbadi AS Anganbadi_1 
WHERE (Month = 4) 

Esso mostra i risultati seguenti ::

Anganbadi_ID    Food-1  Food-2  
-------------------------------------------- 
1165      हाँ   NULL 
1168      हाँ   NULL 
2032      नहीं  NULL 
2218      नहीं  NULL 
2219      हाँ   NULL 
2358      नहीं  NULL 

Please help me il più presto possibile ....

+1

ragazzi fieno, non so perché eri così veloce per contrassegnare questa domanda verso il basso, penso ° Ci sono 3 risposte sbagliate IMHO, ma il ragazzo ha chiaramente l'inglese come seconda lingua (o inferiore) e sta iniziando. Sì, è stato chiesto prima. –

risposta

1

La chiave qui è il join esterno completo su ID, le condizioni in ogni query secondaria possono essere qualsiasi cosa, i join esterni completi ti daranno una riga in cui la corrispondenza dell'ID e i valori nulli nelle colonne opposte in cui non sono. Se si desidera che tutti i risultati anche là dove il cibo non soddisfi né le condizioni in entrambi i mesi, poi fare un join sinistro all'interno di uno dei sub querys con selezionare ID da AllFoodsTable

SELECT Food1, Food2, ID 
FROM (
    SELECT Food1, ID 
    FROM MyTable 
    WHERE Month = 4 
) Con1 
FULL OUTER JOIN (
    SELECT Food2, ID 
    FROM MyTable 
    WHERE Month = 10 
) Con2 
ON Con1.ID = Con2.ID 
0
SELECT DISTINCT Anganbadi_ID 
,(SELECT  Food 
FROM   Anganbadi AS Anganbadi_2 
WHERE  (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) AND (Month = 4)) AS 'Food(4)' 
,(SELECT  Food 
FROM   Anganbadi AS Anganbadi_2 
WHERE  (Anganbadi_1.Anganbadi_ID = Anganbadi_ID) AND (Month = 10)) AS 'Food(10)' 

FROM   Anganbadi AS Anganbadi_1 

SQL-Fiddle

1
SELECT Anganbadi_ID, Food as food1, null as Food2 
where Month = 4 

UNION ALL 

SELECT Anganbadi_ID, null as food1, food as Food2 
where Month = 10 
+2

Perché il voto negativo? Funziona perfettamente per quello che ha chiesto il ragazzo! – CathalMF

+0

Ma non sembra ok ... –

9
SELECT DISTINCT Anganbadi_ID, 

(SELECT Food 
FROM Anganbadi 
WHERE  (Anganbadi_ID = A.Anganbadi_ID) 
    AND (Month = 4)) AS Food1, 

(SELECT Food 
FROM Anganbadi 
WHERE  (Anganbadi_ID = A.Anganbadi_ID) 
    AND (Month = 10)) AS Food2 

FROM Anganbadi AS A 
WHERE A.Month = 10 OR A.Month = 4 

SQL Fiddle

+0

Grazie ... funziona bene –

+0

il suo errore di visualizzazione 'Sottoquery restituisce più di 1 riga', perché? –

+0

Questo ha funzionato perfettamente per me, grazie! –

Problemi correlati