gpt4 book ai didi

mysql - 将多行合并为一行

转载 作者:行者123 更新时间:2023-11-29 04:45:53 25 4
gpt4 key购买 nike

我有一个包含 3 列的表格:

COLUMN A: DATETIME
COLUMN B: DOUBLE
COLUMN C: INT

A 列不是唯一的,有许多行具有相同的 DATETIME 值,但是对于每个 DATETIME C 列都是唯一的。

背景:有人测量了 5 个不同位置的温度,并将其存储在数据库中:

COLUMN A | COLUMN B | COLUMN C

12:00 | 23.4 | 4

12:00 | 24.4 | 5

12:00 | 25.4 | 6

12:01 | 26.4 | 4

12:01 | 27.4 | 5

12:01 | 28.4 | 6

我想将其(在新表或 View 中)转换成如下内容:

COLUMN AA | COLUMNC_VALUE-4 | COLUMNC_VALUE-5 | COLUMNC_VALUE 6

12:00 | 23.4 | 24.4 | 25.4

12:01 | 26.4 | 27.4 | 28.4

C 列中的值可以在另一个表中找到。

这在 SQL 中是否可行,还是我必须编写一些代码?

最佳答案

您想转置数据,但由于 MySQL 没有内置的 PIVOT() 函数,您可以使用 MAX() 手动完成> 和 CASE

SELECT  ColA,
MAX(CASE WHEN ColC = 4 THEN ColB END) ColC_V4,
MAX(CASE WHEN ColC = 5 THEN ColB END) ColC_V5,
MAX(CASE WHEN ColC = 6 THEN ColB END) ColC_V6
FROM TableName
GROUP BY ColA

但是,如果您在 ColC 中有未知数量的值,更好的方法是动态执行,

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN ColC = ''',
ColC,
''' THEN ColB ELSE NULL END) AS ',
CONCAT('`ColC_V', ColC, '`')
)) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT ColA, ', @sql, '
FROM TableName
GROUP BY ColA');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于mysql - 将多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19052033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com