2012-12-31 1 views
1

Mysql 저장 프로 시저에서 루프 내에서 Select 문을 사용할 수 있습니까?Mysql 저장 프로 시저의 루프 내에서 Select 문

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `AbsentReportproc`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `AbsentReportproc`(IN _fromdate DATETIME, IN _todate DATETIME) 
BEGIN 
    CREATE TEMPORARY TABLE daterange (dte DATE); 

    SET @counter := -1; 
    WHILE (@counter < DATEDIFF(DATE(_todate), DATE(_fromdate))) DO 
     INSERT daterange VALUES (DATE_ADD(_fromdate, INTERVAL @counter:[email protected] + 1 DAY)); 
    END WHILE; 

    SELECT tp.cardno, tp.EMPCODE, tp.DEPARTMENT, GROUP_CONCAT(d.dte) Absentddate, COUNT(tp.cardno) Totalnoofabsentdates 
    FROM test_prefixmaster tp JOIN daterange d 
    LEFT JOIN test_prefixtransactions tpt ON tp.cardno = tpt.CARDNO AND DATE(S_DateTime) = d.dte 
    WHERE tpt.CARDNO IS NULL 
    GROUP BY tp.cardno; 

    DROP TABLE daterange; 
END$$ 

DELIMITER ; 

답변

2

이 시도 잘못된 코드입니다. 이렇게 할 수 있습니다 :

SELECT 
    p.CARDNO, 
    COUNT(CARDNO) AS countdate 
FROM test_prefixmaster p 
INNER JOIN test_prefixtransactions t ON p.CARDNO = t.CARDNO 
WHERE Date(t.S_DateTime) BETWEEN fromdate 
          AND todate 
GROUP BY p.CARDNO; 
+0

While 루프에서 Select 문을 사용할 수 있습니까? – String

+0

예. noofday 시간을 테이블로 출력합니다. noofdays가 4 테이블을 사용하는 값보다 4를 가짐을 의미합니다. –

+0

프로 시저에서 while 루프를 사용하는 이유는 무엇입니까? 테이블 구조, 샘플 dat 및 출력으로 정확히 무엇을하고 싶은지 설명하십시오. –

0

당신은 이것에 대한 루프를 필요로하지 않았다

create procedure AbsentReportproc (INOUT fromdate DATETIME, INOUT todate DATETIME) 
as 
begin 

DECLARE startdate DATE; 
DECLARE enddate DATE; 
DECLARE nofdays INT; 
DECLARE counter INT; 
DECLARE countdate DATE; 
startdate=fromdate; 
enddate=todate; 
countdate=fromdate; 

nofdays=DATEDIFF(DAY,startdate,endate); 
counter=1; 

while counter<=noofdays 
loop 

select CARDNO from test_prefixmaster 
where CARDNO not in ( select CARDNO from test_prefixtransactions where Date(S_DateTime)=countdate) 

set countdate=countdate+1; 
set counter=counter+1; 
end loop; 

end//