MySQL Transofrming表到矩阵没有空值

时间:2017-04-26 08:57:56

标签: mysql sql matrix pivot-table

我有一张国家和不同语言的翻译表,这样的话(可能有些数据可能有误,但只是样本值):

addView()

我需要得到的是一个显示一列语言的矩阵,类似于:

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

我尝试过使用CASE句子:

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

但是我在每一列中都得到了很多NULL,如下所示:

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

我怎么能得到这样的矩阵,但是避免使用空值?

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...

坦克。

2 个答案:

答案 0 :(得分:1)

您需要按countryId分组:

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

答案 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

<强>输出:

enter image description here

在这里演示:

Rextester