Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用count(*)创建动态数据透视表查询mysql_Mysql_Sql_Report_Pivot - Fatal编程技术网

使用count(*)创建动态数据透视表查询mysql

使用count(*)创建动态数据透视表查询mysql,mysql,sql,report,pivot,Mysql,Sql,Report,Pivot,我正在尝试这样的结果集: chartday username [number of results] 2014-12-12 person3 73 2014-12-12 person2 9 2014-12-12 person4 166 2014-12-12 person1 103 2014-12-12 person5 1 2014-12-12 person6 168 2014-12-13 person2 15 2014-12-13 person7 22 2014-12

我正在尝试这样的结果集:

chartday    username    [number of results]
2014-12-12  person3 73
2014-12-12  person2 9
2014-12-12  person4 166
2014-12-12  person1 103
2014-12-12  person5 1
2014-12-12  person6 168

2014-12-13  person2 15
2014-12-13  person7 22
2014-12-13  person1 119
chartday   person1 person2 person3 person4 person5 person6 person7
2014-12-12 103     9       73      166     1       168     0
2014-12-13 119     15      0       0       0       0       22
我希望结果如下所示:

chartday    username    [number of results]
2014-12-12  person3 73
2014-12-12  person2 9
2014-12-12  person4 166
2014-12-12  person1 103
2014-12-12  person5 1
2014-12-12  person6 168

2014-12-13  person2 15
2014-12-13  person7 22
2014-12-13  person1 119
chartday   person1 person2 person3 person4 person5 person6 person7
2014-12-12 103     9       73      166     1       168     0
2014-12-13 119     15      0       0       0       0       22

我正在使用mySQL,并且已经为此工作了一段时间,我想了解一些想法。下面是一个我一直在使用的示例:,但我不知道如何添加count*以返回信息。

您可以使用条件聚合:

SELECT chartday
      ,MAX(CASE WHEN username = 'person1' THEN CT ELSE 0 END) AS Person1
      ,MAX(CASE WHEN username = 'person2' THEN CT ELSE 0 END) AS Person2
      ,MAX(CASE WHEN username = 'person3' THEN CT ELSE 0 END) AS Person3
      ,MAX(CASE WHEN username = 'person4' THEN CT ELSE 0 END) AS Person4
      ,MAX(CASE WHEN username = 'person5' THEN CT ELSE 0 END) AS Person5
      ,MAX(CASE WHEN username = 'person6' THEN CT ELSE 0 END) AS Person6
      ,MAX(CASE WHEN username = 'person7' THEN CT ELSE 0 END) AS Person7
FROM Table1
GROUP BY chartday
演示:

要使其动态化,您必须使用准备好的语句:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(username = ''',
      username,
      ''', ct, 0)) AS ',
      username
    )
  ) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT chartday, ', @sql, ' FROM Table1 GROUP BY chartday');

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

演示:

谢谢你提供的信息,这是我最后的选择。我想把它放在动态的地方。这将是highcharts图表的一部分,如果我们提取一份报告,例如2014-12-13,它将只包含第2、7和1个人的结果。将来当我们添加人员时,我不想每次都更新此查询。谢谢,这太完美了。我已经根据您的见解得出了我的答案。我感谢你的帮助!