Транспонировать запрос в PostgreSQL

1

У меня есть следующая таблица:

tb_item
id_item | item_name | price
----------------------------
1       | item1     | 2000
2       | item2     | 3000
3       | item3     | 4000

а также

tb_value
id_value | id_item | value_type | value
----------------------------------------
1        | 1       | bedroom    | 2
2        | 1       | bathroom   | 1
3        | 2       | bedroom    | 3
4        | 2       | bathroom   | 1
5        | 3       | bedroom    | 4
6        | 3       | bathroom   | 2

Я хотел бы получить такой вывод:

item_name | price | bedroom | bathroom
---------------------------------------
item1     | 2000  | 2       | 1
item2     | 3000  | 3       | 1
item3     | 4000  | 4       | 2

Я использую PostgreSQL; какой запрос можно использовать для получения этого вывода? Я тоже использую PHP; есть ли функция PHP, которая может это сделать?

  • 0
    Поиск "сводный запрос".
  • 0
    Это домашнее задание?
Показать ещё 2 комментария
Теги:
transpose

2 ответа

2
Лучший ответ

Вы также можете выполнить это с помощью нескольких инструкций LEFT JOIN

SELECT i.item_name
   , i.price
   , bed.value AS bedroom
   , bath.value AS bathroom
FROM tb_item AS i
LEFT JOIN tb_value AS bed ON i.id_item = bed.id_item
   AND bed.value_type = 'bedroom'
LEFT JOIN tb_value AS bath ON i.id_item = bath.id_item
   AND bath.value_type = 'bathroom'
  • 0
    +1 для отделения условий JOIN от условия фильтра WHERE .
  • 0
    @ А, да, прости. Я обновил его, спасибо, что поймали это.
Показать ещё 2 комментария
0
select item_name, price, bedroom.value as bedroom, bathroom.value as bathroom
from tb_item, tb_value as bedroom, tb_value as bathroom
where bedroom.id_item=tb_item.id_item and bedroom.value_type='bedroom'
and bathroom.id_item=tb_item.id_item and bathroom.value_type='bathroom'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню