3

私はテーブルを持っています

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

同じ ID を持つすべての行が 1 つの行にグループ化され、各テキストがその 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

これがあなたが探しているものであることを願っています: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), 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 に答える