SQL Заявление для имен столбцов на основе значений в других столбцах - PullRequest
0 голосов
/ 27 апреля 2020
id | type | email
__________________

1  | ls  | example@gmail.com
_________________

1  | sp  | example@yahoo.com
_________________

2  | sp  | example@live.com

Я пытаюсь создать команду SQL что-то вроде следующего (псевдо):

SELECT id как 'ID', электронная почта, где type = 'ls' как 'LS Email', email, где type = 'sp' в виде таблицы 'SP Email' FROM;

Я также пытался использовать CASE, но не могу заставить его работать должным образом. Цель состоит в том, чтобы вернуть что-то вроде следующего:

ID | LS Email         | SP Email
________________________________
1 | example@gmail.com | 
1 |                   | example@yahoo.com
2 |                   | example@live.com 

Ответы [ 2 ]

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

Вы можете использовать условное агрегирование:

select id, max(case when type = 'ls' then email end) as ls,
       max(case when type = 'sp' then email end) as sp
from t
group by id;

Если у вас могут быть дубликаты, вы можете использовать group_concat(), чтобы получить все значения:

select id, 
       group_concat(case when type = 'ls' then email end) as ls,
       group_concat(case when type = 'sp' then email end) as sp
from t
group by id;
0 голосов
/ 27 апреля 2020

Вы можете использовать case выражения, например, так:

select
    id,
    case when type 'ls' then email end ls_email,
    case when type 'sp' then email end sp_email
from mytable

Если вы хотите, чтобы оба значения для одного и того же id в одной строке (это не то, что вы показали в ожидаемых результатах), тогда вы можете агрегировать поверх этого:

select
    id,
    max(case when type 'ls' then email end) ls_email,
    max(case when type 'sp' then email end) sp_email
from mytable
group by id
...