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

标签 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 的计数(alloc_date)。我希望仅使用 mysql 来完成此操作

最佳答案

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

  • 更改第一个查询,使其返回 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语句将等于第一个查询返回的行数。

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

关于mysql - 我想计算动态创建的周数列的值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386736/

相关文章:

mysql - 为什么 isNULL 在带有参数化查询的 vbScript 中返回空字符串

php - MYSQL SELECT语句中关于数字和字母的排序问题

mysql - 为什么 activerecord 不填充从创建返回的项目中的自动递增列?

varchar 中的 MySql 日期(选择正确的日期)?

php - 带有 2 个 JOINS 的 CodeIgniter SELECT - 如何获得正确的 ID

mysql - 如何根据平均计算对mysql查询结果进行分组?

mysql - 使用 Google Cloud SQL 连接 3 个表,其中多个事件与每个表中的同一唯一 ID 相关联

mysql - 如何在数据库中存储时间/值数据向量

php - Joomla,如何将自定义字段添加到 Virtuemart 类别表单?

php - JOIN 只返回一个结果