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存储过程编写
答案 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 = NAME
和user_name = NAME
传递。
您可以使用以下查询调用存储过程
call procedureName(1,'test');
@sql
不是存储过程,它是用户定义的变量,因为 var
位于以下情况
SET @var='testing varible';
SELECT @var;
通过运行上面的查询,您将获得存储在上述变量中的值