Как я могу разбить столбец на два sql - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть настольная лодка с колонками и атрибутами ниже.

+-----+--------+-------------+
| bid | bname  | color       |
+-----+--------+-------------+
|  88 | Sophie | Blue        |
|  17 | Kate   | Light Green |
|  13 | Peter  | Yellow      |
|   1 | Nicola | Red         |
|  72 | Christ | Red         |
|  19 | Rick   | Light Green |
|  77 | Morty  | Blue        |
+-----+--------+--------+----+

Как мне распечатать таблицу, которая соответствует названиям лодок одного цвета, например:

+--------+--------+
| boat1  | boat2  |
+--------+--------+
| Sophie | Morty  |
| Kate   | Rick   |
| Nicola | Christ |
+--------+--------+

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

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Только две лодки на цвет:

select color, min(bname) as boat1, max(bname) as boat2
from boat
group by color
having count(*) > 1
order by color;

Все лодки на цвет, две на ряд:

select b1.color, b1.bname as boat1, b2.bname as boat2
from boat b1
join boat b2 on b2.bname > b1.bname and b2.color = b1.color
order by b1.color;

Все лодки на цвет в одном ряду:

select color, string_agg(bname, ', ' order by bname) as boats
from boat
group by color
having count(*) > 1
order by color;
0 голосов
/ 21 апреля 2020

Попробуйте это с самостоятельным соединением, вот это DEMO

select 
    a.bname as boat1,
    b.bname as boat2
from myTable a
join myTable b
on a.color = b.color
where a.bid > b.bid
and a.bname != b.bname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...