【问题标题】:Join language specific names in one row在一行中加入特定语言的名称
【发布时间】:2014-08-11 03:30:39
【问题描述】:

给定以下表格:

材料

+-----------------+-----------------+
|Material         |Name             |
+-----------------------------------+
|00000001         |Material Number 1|
|00000002         |Material Number 2|
+-----------------+-----------------+

材料名称

+---------+---------+-------------+
|Material |Language |Name         |
+---------------------------------+
|00000001 |DE       |Mat. Nummer 1|
|00000001 |FR       |Matérial 1   |
|00000002 |SP       |Mat. 1       |
+---------+---------+-------------+

如何创建一个 SQL 语句(MSSQL 2005 Flavor),它将返回如下数据:

+---------+---------------+---------------+----------+----------+
|Material |Name_EN        |Name_DE        |Name_FR   |Name_SP   |
+---------------------------------------------------------------+
|00000001 |Material Number|1 Mat. Nummer 1|Matérial 1|NULL      |
|00000002 |Material Number|2 NULL         |NULL      |Mat. 1    |
+---------+---------------+---------------+----------+----------+

我尝试了几种使用CASE WHENIS NOT NULL 等的方法。但它总是会导致只有一列被填充的单行,即使有更多名称可用于一种材料。

我能做些什么来实现这个目标?

【问题讨论】:

  • 这些语言修复了吗?

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

您可以使用 join 和条件聚合来做到这一点:

select m.materialid, m.name as Name_EN,
       max(case when nm.language = 'DE' then nm.name end) as Name_DE,
       max(case when nm.language = 'FR' then nm.name end) as Name_FR,
       max(case when nm.language = 'SP' then nm.name end) as Name_SP
from materials m join
     materialnames nm
     on m.materialid = nm.materialid
group by m.materialid, m.name;

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多