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