/ / MySQLの変換テーブルからnull値のない変換テーブル - mysql、sql、matrix、pivot-table

MySQLのヌル値を持たない行列へのTransofrming - mysql、sql、matrix、pivot-table

私は、このような、異なる言語での国と翻訳をまとめた表を持っています(多少のデータは間違っているかもしれませんが、サンプル値にすぎません)

lanId, countryId, name, translation
1,        1,      Spain,  Spain
1,        2,      France, France
1,        3,      Italy,  Italy
2,        1,      Spain,  España
2,        2,      France, Francia
2,        3,      Italy,  Italia
3,        1,      Spain,  Espagne
3,        2,      France, France
3,        3,      Italy,  Italie

私が取得する必要があるのは、これと同じように、言語のための一つの列を示すマトリックスです:

countryId, countryName, es,     fr,
1,           spain,    españa,  espagne
2,           france,   francia, france
3,           italy,    italia,  italie

CASE文を使ってみました。

SELECT countryId,
case WHEN idLan =1 THEN translation  end as en,
case WHEN idLan =2 THEN translation END as es,
case WHEN idLan =3 THEN translation END as fr,
FROM translations

しかし、私はこのように、各列にたくさんのNULLを受け取ります。

countryId, en,    es,     fr
1,       spain,  NULL,    NULL
2,       france, NULL,    NULL
3,       Italy,  NULL,    NULL
1,       NULL,   españa,  NULL
2,       NULL,   francia, NULL
3,       NULL,   italia,  NULL...

どうすればこのような行列を得ることができますが、null値を回避できますか?

countryId, en,    es,       fr
1,       spain,  españa,   espagne
2,       france, francia,  france
3,       Italy,  italia,   italie

戦車

回答:

回答№1は1

次のピボットクエリを試してください。

SELECT
countryId,
name,
MAX(CASE WHEN lanId = 1 THEN translation END) AS en,
MAX(CASE WHEN lanId = 2 THEN translation END) AS es,
MAX(CASE WHEN lanId = 3 THEN translation END) AS fr
FROM translations
GROUP BY
countryId,
name

出力:

ここに画像の説明を入力

ここでデモ:


回答№2の場合は1

国別にグループ化する必要があります。

SELECT countryId,
case WHEN lanId = 1 THEN translation END as en,
case WHEN lanId = 2 THEN translation END as es,
case WHEN lanId = 3 THEN translation END as fr
FROM translations
GROUP BY countryId