2016-03-13 4 views
2

Я пытаюсь объединить 2 значения из одного столбца, но с разными условиями. вот моя таблица образцов.Объединить 2 значения из одной колонки с разными условиями

---------------------------------- 
| user_id | key  | value  | 
---------------------------------- 
    1   firstname maria 
    1   lastname  enuole 
    2   firstname chris 
    2   lastname  magnolia 

Сочетание значений из поля значений с первым и последним именем ключа с тем же идентификатором user_id. Извините, его очень трудно объяснить.

я хотел бы результат, как этот ...

-------------------------- 
| user_id | Name   | 
-------------------------- 
    1   maria enuole 
    2   chris magnolia 

Есть ли способ сделать это? Спасибо за ответ.

ответ

1

Другой способ использования Conditional Aggregate но я предпочитаю Group_concat подход

select user_id, concat(F_name, ' ', L_name) 
From 
(
select user_id, 
     max(case when key = 'firstname' then value end) F_name, 
     max(case when key = 'lastname' then value end) as L_name 
From Yourtable 
Group by user_id 
) A 
+0

omg, вы не знаете, как я счастлив ... ха-ха, спасибо, кучка. – rexme

1

Вы можете сделать это, используя group_concat() и order by. В вашем случае, решение довольно просто:

select user_id, 
     group_concat(value separator ' ' order by key) as name 
from t 
where key in ('firstname', 'lastname') 
group by user_id; 

Или используйте join подход:

select tfirst.user_id, concat_ws(' ', tfirst.value, tlast.value) as name 
from t tfirst join 
    t tlast 
    on tfirst.user_id = tlast.user_id and 
     tfirst.key = 'firstname' and 
     tlast.key = 'lastname'; 
+0

'WHERE key IN ('firstname', 'lastname')' Это явно таблица EAV, и я уверен, есть и другие ключи. – lad2025

+0

@ lad2025. , , Ты так прав. –

0

Попробуйте что-то вроде это:

SELECT user_id 
    , GROUP_CONCAT(value SEPARATOR ' ') as Name 
    FROM tablename 
GROUP BY user_id 
Смежные вопросы