Java 使用MySQL查询考勤月报
我有这样的用户表Java 使用MySQL查询考勤月报,java,mysql,Java,Mysql,我有这样的用户表 user_id | user_name --------+---------- 1 | peter 2 | robert 3 | stive id | user_id | status | date ---+---------+--------+----------- 1 | 1 | p | 12-16-2014 2 | 2 | p | 12-16-2014 3 | 3 |
user_id | user_name
--------+----------
1 | peter
2 | robert
3 | stive
id | user_id | status | date
---+---------+--------+-----------
1 | 1 | p | 12-16-2014
2 | 2 | p | 12-16-2014
3 | 3 | a | 12-16-2014
4 | 1 | p | 12-17-2014
5 | 2 | a | 12-17-2014
6 | 3 | a | 12-17-2014
7 | 1 | p | 12-18-2014
8 | 2 | a | 12-18-2014
9 | 3 | p | 12-18-2014
还有像这样的考勤表
user_id | user_name
--------+----------
1 | peter
2 | robert
3 | stive
id | user_id | status | date
---+---------+--------+-----------
1 | 1 | p | 12-16-2014
2 | 2 | p | 12-16-2014
3 | 3 | a | 12-16-2014
4 | 1 | p | 12-17-2014
5 | 2 | a | 12-17-2014
6 | 3 | a | 12-17-2014
7 | 1 | p | 12-18-2014
8 | 2 | a | 12-18-2014
9 | 3 | p | 12-18-2014
但我想展示如下结果
user_id | user_name | 12-16-2014 | 12-17-2014 | 12-18-2014
--------+-------------+------------+------------+-----------
1 | peter | p | p | p
2 | robert | p | a | a
3 | stive | a | a | p
选择应基于月或周,具体取决于用户提供的日期
我试着像这样用java执行查询,但它不起作用
String setsqlMax = "SET SESSION group_concat_max_len = 100000000000;";
String setsql ="SET @sql = NULL;";
String dynamicsql =
"SELECT"+
" GROUP_CONCAT(DISTINCT"+
" CONCAT("+
"'max(CASE WHEN attendance.attendance_date = ''',"+
" date_format(date, '%Y-%m-%d'),"+
" ''' THEN coalesce(p.present, '''') END) AS `',"+
" date_format(date, '%Y-%m-%d'), '`'"+
")"+
" ) INTO @sql"+
" FROM calendar"+
" where date>='01-01-2015'"+
" and date <= '31-01-2015';";
String mainsql = "SET @sql = CONCAT('SELECT p.user_id,',@sql,'"+
" from"+
"("+
"select c.user_id"+
" from calendar c"+
" cross join attendance a"+
" )"+
" attendance LEFT JOIN attendance p"+
" on attendance.user_id= p.user_id"+
" and attendance.date = p.attendance_date"+
" where attendance.date>=''01-01-2015''"+
" and attendance.date <= ''31-01-2015''"+
" group by attendance.user_id') ;";
String preparesql = " PREPARE stmt FROM @sql";
String ExcuteSql = "EXECUTE stmt ;";
String deallocateSql = "DEALLOCATE PREPARE stmt;";
String totalQuery = setsqlMax + setsql + dynamicsql + mainsql + preparesql+ ExcuteSql + deallocateSql;
这可能与我通过传递MySQL浏览器中完美执行的查询的动态日期,尝试使用pivot表将行转换为列的情况相同,但当我尝试使用java时,它显示错误显示代码和错误消息。