mysql - 在 MySql 存储过程中显示带有动态日期的月度考勤报告

标签 mysql stored-procedures

STUDENTNAME   | ROLLNO | CLASS | 2013-06-01 | 2013-06-02 | 2013-06-03 | 2013-06-04 | 2013-06-05 | 2013-06-06 | 2013-06-07 | 2013-06-08 | 2013-06-09 | 2013-06-10 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|       Naren |      1 |    22 |          A |          A |          A |          A |          P |          P |          P |          P |          P |          P |
|       Srinu |      2 |    22 |          P |          P |          P |          P |          P |          P |          P |          P |          P |          P |
|        Blah |      3 |    22 |          A |          P |          P |          P |          P |          P |          P |          P |          P |          P |

我想要这样的出勤报告

我的考勤表是

Att_id   User_id    Attendance_date Present/Absent
1          1              2015-01-01    P
2          2              2015-01-01    L
3          1              2015-01-02    P
4          2              2015-01-02    P
5          1              2015-01-03    L
6          2              2015-01-03    L

我有一个存储过程

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(CASE WHEN ca.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>='2013-06-01'
  and date <= '2013-06-05';

SET @sql 
  = CONCAT('SELECT ca.user_id,
               ', @sql, ' 
            from
            (
              select c.date, a.user_id
              from calendar c
              cross join attendance a
            ) ca
            left join attendance  p
              on ca.user_id= p.user_id
              and ca.date = p.attendance_date
            where ca.date>=''2013-06-01''
              and ca.date <= ''2013-06-05''
          group by ca.user_id');

但是这里什么是@sql。我不明白这个Sql存储过程

请你写Mysql存储过程

最佳答案

一般语法

DELIMITER $$

CREATE
    PROCEDURE `moodle`.`procedureName`(IN id INT, IN NAME VARCHAR(20))

    BEGIN
          --    paste QUERY here;
                SELECT * FROM user WHERE user_name = NAME  AND user_id =id;
    END$$

DELIMITER ;

这是一个参数化存储过程,其中包含两个名为 idIN 类型参数,其 datatypeint,其他是 name,其 datatypevarchar(20) ,它们在中被传递为 user_name = NAMEuser_name = NAME在存储过程中查询。

您可以使用以下查询调用存储过程

call procedureName(1,'test');

@sql 不是存储过程,它是用户定义的变量,如 var 如下例所示

SET @var='testing varible';
SELECT @var;

通过运行上面的查询,您将获得存储在上面变量中的值

关于mysql - 在 MySql 存储过程中显示带有动态日期的月度考勤报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921637/

相关文章:

mysql程序错误无法运行

sql-server - 链接服务器的替代方案,具有相同的速度

php - 硬 SQL 查询

mysql - 如何在 Passenger fork 工作进程后重置 Datamapper 连接?

php - 无法使用 PHP 程序获取 MySQL 行数据

sql - sql server中XML解析非法字符

sql - 如何选择一个空的结果集?

PHP/MySQL - 从后台运行操作/处理运行时间较长的方法

MySQL : Return random value from each column

sql - SQL 查询中的动态 WHERE 子句