3

我有一张桌子

ID | LanguageID | Text
1  | 1          | Abc
1  | 2          | Def

我想选择数据,以便将具有相同 ID 的所有行分组为一行,并将每个文本选择到具有其 LanguageID 名称的列中。在这个特定的例子中,结果将是

[ID: 1, 1: 'Abc', 2: 'Def']

这可以做到吗?如何?谢谢

我正在使用 MySQL。

编辑:似乎最简单的事情是编写一个脚本来合并数据库外的行。

EDIT2:我不知道要接受什么答案,因为没有一个有效或符合上述要求。

4

4 回答 4

1

如果您有固定数量的语言 ID,那么您可以这样做:

select id,
       max(case when LanguageId = 1 then text end) as "1",
       max(case when LanguageId = 2 then text end) as "2",
       max(case when LanguageId = 3 then text end) as "3"
from t
group by id;

如果事先不知道语言 id,则需要使用动态 SQL 构造查询,然后准备并执行。

如果 languageid 是动态的:

select @s = concat('select id',
                   group_concat(concat(', max(case when LanguageId = ',
                                       LanguageId,
                                       ' then text end) as "',
                                       LanguageId, '"'
                                      )
                               ),
                   ' from t group by id'
                  )
from (select distinct LanguageId from t) t;

PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
于 2013-08-04T15:17:23.197 回答
0
select id, group_concat(languageid), group_concat(text)
from t
group by id

SQLFiddle 演示

或者

select id, group_concat(languageid, ':', text)
from t
group by id

SQLFiddle 演示

于 2013-08-04T15:16:39.953 回答
0

看看这个希望这是你在找什么:http ://sqlfiddle.com/#!2/159927/13

    select id, group_concat(concat(languageid, ' ',text))
    from t
    group by id
于 2013-08-04T15:36:24.877 回答
0
     select id, group_concat(languageid,':', text) as result
     from table1
     group by id

演示

于 2013-08-04T15:19:23.697 回答