我想计算动态创建的周数列的值的数量

时间:2017-07-29 07:40:16

标签: mysql

我有一个表emp_sample,其字段为emp_code,alloc_date,alloc_hrs。我希望显示每周的分配小时总数,其中年份和周数作为其列名动态地为mysql过程中的任意数量的记录 这是我的代码

SET @sql = NULL;
SET SESSION group_concat_max_len = 1000000;
SELECT GROUP_CONCAT(DISTINCT 
  (CONCAT ('MAX(CASE WHEN alloc_date=''',
         alloc_date, 
         ''' THEN concat(alloc_hrs) END) `',
       year(alloc_date),date_format(alloc_date,'%b'),week(alloc_date),
         'week`'
         ))
 )
  INTO @sql
  FROM emp_sample;
SET @sql = CONCAT('SELECT emp_code, ', @sql,' FROM emp_sample group by emp_code');
PREPARE stmt FROM @sql;
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;

我希望我的输出像

emp_code        julweek30 julweek31  ......
2145                 5       3
2146                 4       2

这个值应该是每周emp_code的count(alloc_date)。我希望这只能用mysql完成

1 个答案:

答案 0 :(得分:0)

看起来您需要暂时存储第一个查询的结果并使用它来形成第二个查询,我建议如下:

  • 更改第一个查询,使其在结果中返回alloc_datelabel,而不仅仅是alloc_date,例如:

    date | label 31/7/2017 | julweek31

  • 将结果存入内存(使用php / java代码)

  • 遍历结果并动态生成第二个查询。对于第一个结果中的每一行,第二个查询中都会有一个内部SELECT语句,例如:

    SELECT es.emp_code, (SELECT COUNT(*) FROM emp_sample WHERE emp_code = es.emp_code AND alloc_date = <date_of_row_1>) AS <label_of_row_1> FROM emp_sample es GROUP BY es.emp_code

    内部SELECT语句的数量将等于第一个查询返回的行数。

这应该会给你想要的结果。