2014-02-12 2 views
0

У меня есть таблица, например, так:SQL, соединяющий таблицу на себе (если возможно)?

room code  facility 
A001    1 
A001    2 
A002    3 
A003    1 

Etc

есть способ, что я могу присоединиться к этой таблице следующим образом

room code facility 1  facility 2 
A001    1    2 
A002        3 
A003    1 

мне это нужно, как это так, что я могу проверить какие комнаты имеют какие-то объекты, а затем на моей странице html, я покажу их список, основанный на том, какие объекты были отфильтрованы пользователем.

h ope это имеет смысл!

заранее спасибо

+3

Почему "3" идти во второй колонке? –

+0

Вы можете найти предложение PIVOT для добавления в конец инструкции SQL. – crowne

ответ

0

Следующая должны это сделать (хотя это не поставит 3 под facility_2 но под facility_1.

select t1.room_code, 
     t1.facility as facility_1, 
     t2.facility as facility_2 
from the_table t1 
    left join the_table t2 
     on t1.room_code = t2.room_code 
     and t1.facility <> t2.facility; 

Это также предполагает, что никогда не более двух строк с одинаковым room_code.

Если у вас есть неизвестное количество удобств в комнате, вы можете объединить их в массив или список, разделенный запятой, с которым вы можете иметь дело в своем интерфейсе.

Что-то вроде этого (для Postgres, как вы не говоря уже о вашем СУБД)

select room_code, 
     string_agg(facility,',') as facilities, -- gives a comma separated list 
     array_agg(facility) as facilities_array -- gives an array of integers 
from the_table 
group by room_code; 
1

Вам не нужно присоединиться к нему. Вы можете просто агрегат:

select roomcode, 
     min(facility) as facility1, 
     (case when min(facility) <> max(facility) then max(facility) end) as facility2 
from t 
group by roomcode; 
0

Попробуйте это:

SELECT first.roomcode, first.facility, second.facility 
FROM mytable first 
LEFT JOIN mytable second on first.roomcode = second.roomcode AND first.facility != second.facility 
Смежные вопросы