我有一个表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_date
和label
在结果中,而不仅仅是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/