在 SQL 中,有时我们需要将一列拆分成多列。这通常在数据清理、报告或数据分析等场景中很有用。下面是一个示例,演示如何将一列拆分成多列。
假设我们有一个名为
orders
的表,其中包含一个名为
order_items
的列,该列包含多个以逗号分隔的订单项。我们想要将这个列拆分成多列,以便更好地组织数据。
首先,我们需要确定每个订单项的详细信息。假设每个订单项由一个名称和一个数量组成,它们之间用逗号分隔。例如:
'apple,3'
表示苹果 3 个。
以下是一个示例 SQL 查询,用于将
order_items
列拆分成多列:
SELECT
id,
MAX(CASE WHEN item_index = 1 THEN item_value END) AS item1,
MAX(CASE WHEN item_index = 2 THEN item_value END) AS item2,
MAX(CASE WHEN item_index = 3 THEN item_value END) AS item3,
MAX(CASE WHEN item_index = 4 THEN item_value END) AS item4,
MAX(CASE WHEN item_index = 5 THEN item_value END) AS item5,
MAX(CASE WHEN item_index = 6 THEN item_value END) AS item6
FROM (
SELECT
id,
SUBSTRING_INDEX(order_items, ',', numbers.n) AS item_value,
numbers.n - 1 AS item_index
FROM (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
) numbers INNER JOIN orders ON CHAR_LENGTH(order_items) - CHAR_LENGTH(REPLACE(order_items, ',', '')) >= numbers.n - 1
ORDER BY id, n
) subquery
GROUP BY id;