[英]Combine multiple rows to one row
I have a table with 3 columns: 我有一个有3列的表:
COLUMN A: DATETIME
COLUMN B: DOUBLE
COLUMN C: INT
Column A is not unique there are many rows with the same DATETIME
value, however for every DATETIME
COLUMN C is unique. A列不是唯一的,有许多行具有相同的
DATETIME
值,但是对于每个DATETIME
COLUMN C都是唯一的。
Background: Somebody measured on 5 different positions a temperature and this is stored in the database as: 背景:有人在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
I would like to transform this (in a new table or view) into something like: 我想将此(在新表或视图中)转换为:
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
The values in Column C can be found in another table. C列中的值可以在另一个表中找到。
Is this possible in SQL or do I have to write some code? 这可能在SQL中还是我必须编写一些代码?
You want to transpose data but since MySQL
does not have a builtin PIVOT()
function, you can manually do it using MAX()
and CASE
. 您想要转置数据,但由于
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
However, if you have unknown number of values in ColC
, a much better way is to do in dynamically, 但是,如果您在
ColC
有未知数量的值, 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;
It is a common problem named pivot table . 这是一个名为数据透视表的常见问题。 And my opinion is - you should do that in application, not in SQL - that is because it's unreliable to act such way in DBMS.
我的观点是 - 你应该在应用程序中而不是在SQL中这样做 - 这是因为在DBMS中以这种方式行事是不可靠的。 Imagine you will have 100 different values for
columnC
- what then? 想象一下,你将为
columnC
提供100个不同的值 - 那么呢? Or different count of columnC
values per one datetime. 或者每个日期时间的
columnC
值的计数不同。
But if you still want to do that in MySQL, here is a good answer for this issue. 但是,如果你仍然想这样做在MySQL, 这里是这个问题一个很好的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.