【问题标题】:MySQL Transofrming table to matrix without null valuesMySQL将表转换为没有空值的矩阵
【发布时间】:2017-04-26 08:57:56
【问题描述】:

我有一张表格,其中包含不同语言的国家和翻译,如下所示(可能有些数据可能有误,但只是示例值):

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

我怎样才能得到这样的矩阵,但避免空值?

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

坦克。

【问题讨论】:

  • 你也需要一个 GROUP BY。
  • 谢谢。关键是按 countryId 和 name 分组。

标签: mysql sql matrix pivot-table


【解决方案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

输出:

演示在这里:

Rextester

【讨论】:

    【解决方案2】:

    您需要按 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2010-12-03
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多