返回

数据表重塑指南:如何定制数据以满足您的需求

mysql

如何重塑数据表以满足您的特定需求

问题

您有一个包含以下列的查询结果表:

  • 代码
  • 客户号码

您的目标是将此表转换为一个新的表,其中包含以下列:

  • 代码
  • 客户号码

解决方法

有多种方法可以实现这一目标,我们将探讨其中四种:

方法 1:使用透视表

透视表是一个强大的工具,允许您以交互方式汇总和重新排列数据。在本例中,我们可以使用透视表将原始表转换为所需格式。

  1. 步骤 1:创建一个透视表

选择原始表,转到“插入”选项卡,然后单击“透视表”。

  1. 步骤 2:拖放字段

将“代码”字段拖放到“行”字段区域,将“客户号码”字段拖放到“列”字段区域,将“值”字段拖放到“值”字段区域。

  1. 步骤 3:汇总数据

确保“值”字段的“汇总方式”设置为“求和”。

方法 2:使用 CASE 语句

CASE 语句允许您根据条件从不同的值中进行选择。在本例中,我们可以使用 CASE 语句将客户号码合并到代码列中。

SELECT
    CASE
        WHEN kndnr = '10027' THEN code || ' - 10027'
        WHEN kndnr = '10026' THEN code || ' - 10026'
        ELSE 'Unknown'
    END AS code_kndnr,
    SUM(value) AS value
FROM
    raw
GROUP BY
    code_kndnr
ORDER BY
    code_kndnr;

方法 3:使用 UNION

UNION 操作符允许您合并具有相同列的两个或多个表。在本例中,我们可以使用 UNION 来合并使用透视表和 CASE 语句创建的两个表。

SELECT
    code,
    kndnr,
    value
FROM
    (
        SELECT
            code,
            kndnr,
            SUM(value) AS value
        FROM
            raw
        GROUP BY
            code,
            kndnr
        ORDER BY
            code,
            kndnr
    ) AS t1
UNION
SELECT
    CASE
        WHEN kndnr = '10027' THEN code || ' - 10027'
        WHEN kndnr = '10026' THEN code || ' - 10026'
        ELSE 'Unknown'
    END AS code_kndnr,
    NULL AS kndnr,
    SUM(value) AS value
FROM
    raw
GROUP BY
    code_kndnr
ORDER BY
    code_kndnr;

方法 4:使用 PIVOT

PIVOT 操作符允许您将行转换为列。在本例中,我们可以使用 PIVOT 将表转换为所需格式。

SELECT
    code,
    MAX(CASE WHEN kndnr = '10027' THEN value END) AS value_10027,
    MAX(CASE WHEN kndnr = '10026' THEN value END) AS value_10026
FROM
    raw
GROUP BY
    code
ORDER BY
    code;

常见问题解答

  1. 透视表和 PIVOT 之间的区别是什么?

透视表是一个交互式工具,允许您以不同的方式查看和汇总数据。PIVOT 是一个 SQL 操作符,用于将行转换为列或将列转换为行。

  1. 什么时候使用 CASE 语句?

CASE 语句用于根据条件从不同的值中进行选择。当您需要基于特定条件对数据进行转换或分组时,CASE 语句非常有用。

  1. UNION 操作符有什么作用?

UNION 操作符用于合并具有相同列的两个或多个表。当您需要将来自不同来源的数据组合到一个表中时,UNION 操作符非常有用。

  1. PIVOT 的限制是什么?

PIVOT 仅适用于聚合查询。它不能用于对原始数据进行转换。

  1. 重塑数据表时应注意什么?

重塑数据表时,重要的是要确保新表的结构满足您的具体需求。您还应该注意数据类型,以避免出现任何错误。