mysql动态交叉表,以日期为列

标签 mysql database date pivot crosstab

这是我的问题,假设我有一个如下所示的数据库表:

表:传入

ID | Type  | cdate
 1 | Type1 | 2014-07-01 6:00:00
 1 | Type2 | 2014-07-02 6:00:00
 1 | Type1 | 2014-07-03 6:00:00
 1 | Type3 | 2014-07-04 6:00:00
 1 | Type2 | 2014-07-04 6:00:00

我想要一个将数据显示为一列的查询:

Type  |  7-1  |  7-2  |  7-3  |  7-4  
Type1 |  1    |  0    |   1   |  0
Type2 |  0    |  1    |   0   |  1
Type3 |  0    |  0    |   0   |  1

我的SQL代码是:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(case when date_format(cdate, '%m-%d') = ''',
      date_format(cdate, '%m-%d'),
      ''' then 1 end) AS ',
      replace(cdate, ' ', '')
    )
  ) INTO @sql
from incoming WHERE cdate BETWEEN '2014-07-01 5:00:00' AND '2014-07-04 5:00:00';

SET @sql = CONCAT('SELECT type, ', @sql, ' from incoming group by type');

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

运行脚本时收到 SQL 语法错误。谁能帮我找出哪里出了问题?

最佳答案

您需要转义表达式中的单引号。 另外,为您的列创建一个更简单的别名,并将其括在反引号中(以防万一)。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(case when date_format(cdate, \'%m-%d\') = \'', -- Escape quotes here
      date_format(cdate, '%m-%d'),                          -- (I prefer to use
      '\' then 1 end) AS ',                                 -- \' instead of ''')
      '`', date_format(cdate, '%Y%m%d'), '`' -- Create a simpler alias for 
                                             -- columns here, and don't forget 
                                             -- to enclose the alias in 
                                             -- back-ticks (`)
    )
  ) INTO @sql
from incoming;

SET @sql = CONCAT('SELECT type, ', @sql, ' from incoming group by type');

select @sql;

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

检查example in SQL Fiddle

关于mysql动态交叉表,以日期为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680618/

相关文章:

database - 输入流不是有效的二进制格式。

r - 使用 apply 转换 R 中的日期并处理 NA 日期

php - 数据库显示希伯来语,但在 php 中希伯来语数据显示为问号

javascript - 使用过滤器以自定义格式设置日期格式

date - 如何让我的模型接受两种不同的日期格式?

mysql - 从多个表中选择值,其中 value = X

mysql - 如何在安装 bitnami wordpress 时指定 xampp mysql 端口号?

不改变server-id属性的Mysql主从复制

php - 显示所有用户中答案选择的百分比

java - Hibernate 刷新速度不够快,无法捕获数据库异常