Niunaiストレージ・プロシージャ行変換列

1777 ワード


begin
         DECLARE done int default 0;
         DECLARE m_kind int;
	declare m_name varchar(40) default '';
	declare cp int default 0;
	  DECLARE str text default '';
	declare m_date Datetime;
	 DECLARE sqll text default '';
    DECLARE cur1 CURSOR FOR select milk_id from milk_kind;
         DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
         open cur1;
         REPEAT
         if not done then
         FETCH cur1 INTO m_kind;
         set str=CONCAT(str,','    ,   'sum(if(milk_id= ',m_kind, ' , 1, 0))', '''',cp,'''');
	set cp=cp+1;
         end IF;
         UNTIL done END REPEAT;
set cp=1;


set m_date='2009-10-01';
set sqll=CONCAT("select date_format(str_to_date('",m_date,"', '%Y-%m-%d'), '%Y-%m-%d') ",str,"  from distribution where '",m_date,"'<=date_end and '",m_date,"'>=date_start");
while datediff(m_date, '2009-11-01')<-1  do
set m_date=date_add(m_date,interval 1 day);
set sqll=concat(sqll," union select date_format(str_to_date('",m_date,"', '%Y-%m-%d'), '%Y-%m-%d') ",str,"  from distribution where '",m_date,"'<=date_end and '",m_date,"'>=date_start");

end while;






	set @sqlString=sqll;
         prepare sqlstmt from @sqlString;
         execute sqlstmt;
         deallocate prepare sqlstmt;

end