mysql怎么把表转置
时间 : 2023-03-08 14:21:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在MySQL中,可以通过使用SELECT语句的PIVOT操作来实现将表格转置。PIVOT操作将每个列名作为一列,并将每个列名的值转移到其相应的新列中。

下面是使用PIVOT转置表格的步骤:

Step 1: 创建一个测试表

为了测试PIVOT操作,我们需要创建一个包含测试数据的表。以下是一个简单的测试表,其中包含两列Name和Value:

CREATE TABLE test_table (

Name VARCHAR(10),

Value INT

);

INSERT INTO test_table (Name, Value)

VALUES ('A', 10),

('B', 20),

('C', 30),

('D', 40);

该表包含了四个名称为A、B、C和D的行,每行都有一个感兴趣的值。

Step 2: 使用PIVOT进行转置

使用PIVOT操作转置这个表很简单。以下是PIVOT语句的基本语法:

SELECT [first_column],

[pivot_value_1],

[pivot_value_2],

[pivot_value_n]

FROM (

SELECT [first_column],

[pivot_column],

[aggregate_function]([aggregate_column]) AS [value]

FROM [table]

GROUP BY [first_column],

[pivot_column]

) AS [PivotTable]

PIVOT (

[aggregate_function]([value])

FOR [pivot_value_1] IN ([pivot_value_1], [pivot_value_2], [pivot_value_n])

) AS [PivotResult];

在这里,我们将Name列作为第一个列,并在PIVOT语句中将其作为[first_column]使用。我们的感兴趣的Value列是要被转置的列,因此我们在PIVOT语句中使用[aggregate_function] AVG和[value]作为我们要转置的列。

以下是对上面的测试表执行PIVOT操作后得到的结果:

SELECT Name,

AVG(CASE WHEN Name = 'A' THEN Value END) AS A,

AVG(CASE WHEN Name = 'B' THEN Value END) AS B,

AVG(CASE WHEN Name = 'C' THEN Value END) AS C,

AVG(CASE WHEN Name = 'D' THEN Value END) AS D

FROM test_table

GROUP BY Name;

+------+----+----+----+----+

| Name | A | B | C | D |

+------+----+----+----+----+

| A | 10 | 0 | 0 | 0 |

| B | 0 | 20 | 0 | 0 |

| C | 0 | 0 | 30 | 0 |

| D | 0 | 0 | 0 | 40 |

+------+----+----+----+----+

最终的结果是将原始表中的四个行转置为四个列(A、B、C和D),其中每个列对应的是感兴趣的Value值。当然,如果你想在转置表格中使用其他聚合函数,只需在PIVOT语句中使用适当的聚合函数即可。

总之,使用MySQL的PIVOT操作可以方便地将一个表格从行转置为列,使数据更易于分析和处理。