我正在尝试转置非常基本的输出以用于Web应用程序。由于我的优势还在于mysql,因此,我想在它到达应用程序之前就做到这一点。
我目前拥有的是:
date value
2012-01-01 23
2012-01-02 33
2012-01-03 56
2012-01-04 10
我想要的是:
2012-01-01 2012-01-02 2012-01-03 2012-01-04
23 33 56 10
我的SQL是:
SELECT
date,
value
from values
where date >= curdate() - interval 3 day
我已经在网上进行了大量研究,但我找不到解决此问题的好方法。这将是动态的,因为日期每天都会更改。
这是一个动态sql,用于透视记录,
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN date = ''',
date,
''' THEN Value ELSE NULL END) AS ',
CONCAT('`', date, '`')
)) INTO @sql
FROM TableName
// WHERE date >= curdate() - interval 3 day // add condition here
ORDER BY date;
SET @sql = CONCAT('SELECT ', @sql, '
FROM TableName');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
问题内容: 如何在MySQL查询中将行转换为列? 问题答案: 您可以使用将行转换 为 列,但不能以任何自动方式转置整个结果集。您可以编写一个查询来手动生成每个列,或者在应用程序中执行。 这是有关编写复杂查询以模拟换位的教程: http://www.artfulsoftware.com/infotree/queries.php#78
问题内容: 我有一个简单的查询,它产生以下结果: 我想将行转置为列。 我了解mysql没有枢轴功能,因此需要工会,但不能100%确定。 先谢谢您的帮助。 问题答案: 您可以使用这样的交叉表来做到这一点- 另外,您应该将transporttype值移动到查找表中,并在该表中包含transporttype_id。
问题内容: 这是我当前的mysql表的样子: 现在,我想返回基于星期几进行分组的结果集,如下所示: 这是我当前的查询。但它只返回每天的第一打。 有人可以帮我弄这个吗?谢谢迈克 问题答案: SQLFiddle演示 输出值
问题内容: 一个菜鸟MYSQL用户....我有一个简单的MySQL查询,该查询返回值,并使用GROUP_CONCAT函数: 但是,我需要转置查询,以便它以单独的列而不是行的形式返回“名称”。MySQL完全有可能吗? 问题答案: 您需要执行一项操作,MySQL本身不支持该操作(与某些其他RDBMS不同)。 您可以获得的最接近的结果是按照以下几行构造SQL: 如果可能的值是动态的,则可以从以下结果中以
问题内容: 我有一个带有列的详细信息表: user_id int 代码int 值int 我想建立一个汇总表,如下所示: user_id int valueA int valueB int 在详细信息表中,valueA对应于说代码5,而valueB对应于说代码6,所以我正在寻找类似的东西: 插入摘要(user_id,valueA,valueB)VALUES(从详细信息中选择???); 当然,问题是我
问题内容: 我有下表,该表为每个用户提供了多个电子邮件地址。 我需要将其展平为用户查询中的列。请根据创建日期为我提供“最新”的3个电子邮件地址。 问题答案: 使用从模块。