2011-07-07 14 views
7

mam poniższej tabeli:SQL przyłączyć 2 wierszy w tej samej tabeli

Name Type  Value 
--------------------- 
mike phone 123  
mike address nyc  
bob address nj  
bob phone 333 

chcę mieć wynik takiego:

name value value 
------------------- 
mike nyc 123 
bob nj  333 

Jak mogę to zrobić?

Odpowiedz

16

nazywane jest samołączeniem. Sztuką jest używać aliasów.

select 
    address.name, 
    address.value as address, 
    phone.value as phone 
from 
    yourtable as address left join 
    yourtable as phone on address.name = phone.name 
where address.type = 'address' and 
     (phone.type is null or phone.type = 'phone') 

Kwerenda zakłada, że ​​każda nazwa ma adres, ale numery telefonów są opcjonalne.

+2

Czy wpisując to w (niemal dosłownie), gdy pojawiła się odpowiedź. – Chad

+0

Zdarza mi się też bardzo :-) – cdonner

+0

Czy Oracle jest w stanie dołączyć ** JAKIEGOKOLWIEK? – Bitterblue

0

coś takiego:

SELECT a.name AS name, phone, address 
    FROM (SELECT name, value AS phone FROM mytable WHERE type = "phone") AS a 
    JOIN (SELECT name, value AS address FROM mytable WHERE type = "address") AS b 
    ON(a.name = b.name); 
Powiązane problemy