首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将日期作为列的mysql动态交叉表

将日期作为列的mysql动态交叉表
EN

Stack Overflow用户
提问于 2014-07-10 15:32:29
回答 1查看 2K关注 0票数 2

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

tbl:收到

代码语言:javascript
复制
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

我需要一个查询,该查询将以日期作为列显示数据:

代码语言:javascript
复制
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代码是:

代码语言:javascript
复制
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语法错误。有人能帮我找出什么是坏的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-10 15:43:41

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

代码语言:javascript
复制
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;

检查SQL Fiddle中的示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24680618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档