2015-09-25 3 views
0

Если у меня есть эти данные в базе данных MySQL:Группировка и дополнительные столбцы для каждого языка/перевода названия продукта

PID  LANG TRANS 
1  EN  Apple 
1  DE  Apfle 

Я хочу, чтобы получить результаты в SQL:

PID  EN_TRANSLATION  DE_TRANSLATION 
1  Apple    Apfle 

Как сделать это? У меня уже есть таблицы и все, но мне нужна помощь в написании запроса, который даст мне столбцы на каждый язык для каждого продукта.

ПРИМЕЧАНИЕ: Я не знаю набора языков! Это может быть EN, DE или что-то еще.

Thx!

+2

Сколько возможно «LANG»? В примере у вас есть только 2. –

+0

, к сожалению, я не знаю множества языков .. это может быть EN, DE или что-то еще ... это бесплатно для пользователя добавить любой язык – p3ro

ответ

2

Если известно множество LANG, то вы можете использовать следующий метод для создания мнения, шарнирных

select 
PID, 
max(case when LANG = 'EN' then TRANS end) as EN_TRANSLATION, 
max(case when LANG = 'DE' then TRANS end) as DE_TRANSLATION 
from table_bame 
group by PID 

Если LANG значения неизвестно, то вам необходимо использовать динамический SQL для этого, как

set @sql = null; 
select 
    group_concat(distinct 
    concat(
     'max(case when LANG = ''', 
     LANG, 
     ''' then TRANS end) AS ', 
    concat(LANG,'_TRANSLATION') 
    ) 
) into @sql 
from table_name ; 

set @sql = concat('select PID, ', @sql, ' from table_name 
        group by PID 
'); 

prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 

http://www.sqlfiddle.com/#!9/95d29/1

+0

к сожалению я не знаю, набор языков .. это может быть EN, DE или что-то еще ... пользователь может свободно добавлять любой язык – p3ro

+0

В этом случае вам понадобится динамический sql, проверьте обновление. –

Смежные вопросы