我有一张桌子
ID | LanguageID | Text
1 | 1 | Abc
1 | 2 | Def
我想选择数据,以便将具有相同ID的所有行分组为一行,并将每个文本选择为具有其LanguageID名称的列。在这个特定的例子中,结果将是
[ID: 1, 1: 'Abc', 2: 'Def']
可以这样做吗?怎么样?谢谢
我正在使用MySQL。
编辑:似乎最简单的方法是编写一个脚本来合并数据库之外的行。
EDIT2:我不知道接受什么答案,因为没有答案或符合上述要求。
答案 0 :(得分: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;
答案 1 :(得分:0)
select id, group_concat(languageid), group_concat(text)
from t
group by id
或
select id, group_concat(languageid, ':', text)
from t
group by id
答案 2 :(得分:0)
select id, group_concat(languageid,':', text) as result
from table1
group by id
答案 3 :(得分:0)
看看这个希望这就是你要找的东西:http://sqlfiddle.com/#!2/159927/13
select id, group_concat(concat(languageid, ' ',text))
from t
group by id