返回
数据表重塑指南:如何定制数据以满足您的需求
mysql
2024-03-07 04:34:07
如何重塑数据表以满足您的特定需求
问题
您有一个包含以下列的查询结果表:
- 值
- 代码
- 客户号码
您的目标是将此表转换为一个新的表,其中包含以下列:
- 代码
- 客户号码
- 值
解决方法
有多种方法可以实现这一目标,我们将探讨其中四种:
方法 1:使用透视表
透视表是一个强大的工具,允许您以交互方式汇总和重新排列数据。在本例中,我们可以使用透视表将原始表转换为所需格式。
- 步骤 1:创建一个透视表
选择原始表,转到“插入”选项卡,然后单击“透视表”。
- 步骤 2:拖放字段
将“代码”字段拖放到“行”字段区域,将“客户号码”字段拖放到“列”字段区域,将“值”字段拖放到“值”字段区域。
- 步骤 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;
常见问题解答
- 透视表和 PIVOT 之间的区别是什么?
透视表是一个交互式工具,允许您以不同的方式查看和汇总数据。PIVOT 是一个 SQL 操作符,用于将行转换为列或将列转换为行。
- 什么时候使用 CASE 语句?
CASE 语句用于根据条件从不同的值中进行选择。当您需要基于特定条件对数据进行转换或分组时,CASE 语句非常有用。
- UNION 操作符有什么作用?
UNION 操作符用于合并具有相同列的两个或多个表。当您需要将来自不同来源的数据组合到一个表中时,UNION 操作符非常有用。
- PIVOT 的限制是什么?
PIVOT 仅适用于聚合查询。它不能用于对原始数据进行转换。
- 重塑数据表时应注意什么?
重塑数据表时,重要的是要确保新表的结构满足您的具体需求。您还应该注意数据类型,以避免出现任何错误。