在MySql存储过程中显示动态日期的月度出勤报告

时间:2015-01-13 11:59:10

标签: 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 Store程序

Plz你可以用Mysql存储过程编写

1 个答案:

答案 0 :(得分:0)

一般语法

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 ;

这是一个参数化存储过程,其中包含两个 IN 类型参数,名为 id datatype int 其他 name datatype varchar(20) < / strong>在存储过程的查询中作为user_name = NAMEuser_name = NAME传递。

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

call procedureName(1,'test');

@sql 不是存储过程,它是用户定义的变量,因为 var 位于以下情况

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

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