产品名称

时间:2015-09-25 07:17:21

标签: mysql

如果我在MySQL数据库中有这些数据:

PID     LANG    TRANS
1       EN      Apple
1       DE      Apfle

我想在sql中获得结果:

PID     EN_TRANSLATION      DE_TRANSLATION
1       Apple               Apfle

怎么做?我已经有表格和所有内容,但需要帮助编写查询,这将为每个产品的每个结果提供每种语言的列。

注意:我不知道语言集合!它可以是EN,DE或其他任何东西......

THX!

1 个答案:

答案 0 :(得分: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