多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > 將一張表中的數據作為列名的存儲過程

將一張表中的數據作為列名的存儲過程

來源:程序員人生   發布時間:2015-03-25 11:04:16 閱讀次數:3315次

問題:在做項目的進程中遇到1個人問題:那就是將A表的deco字段的值,作為B表的列來展現,而且這些值的數據是從C表中取到的

方法:本來是想用,1個視圖來列出deco字段里面的值和C表中的數據的,但是發現幾張表的關聯比較復雜(對應我來講)

使用單純的select語句,是不能得到想要的效果的,在網上找了相干資料后,發現可以用游標來對查詢結果集中的每條

記錄來處理,所以自己寫出了以下的存儲進程,這個存儲進程會創建兩張表,這兩張表的簡單關聯就能夠得到我想要的數據集。

代碼:

/*創建進程*/ DELIMITER // DROP PROCEDURE IF EXISTS update_report // CREATE PROCEDURE update_report() BEGIN DECLARE done INT DEFAULT 0; DECLARE sql_alter VARCHAR(256) default ''; DECLARE sql_str VARCHAR(256) default ''; DECLARE a VARCHAR(200) DEFAULT ''; DECLARE b VARCHAR(200) DEFAULT ''; DECLARE c VARCHAR(200) DEFAULT ''; DECLARE kpi_value VARCHAR(200) DEFAULT ''; DECLARE mycursor CURSOR FOR SELECT id, name FROM dc_formula WHERE important=1; DECLARE projectcursor CURSOR FOR SELECT id from management_project; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; set @sql_alter='CREATE TABLE project_kpis ( id int(11) NOT NULL PRIMARY key AUTO_INCREMENT,project_id VARCHAR(20) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8'; PREPARE sql_str from @sql_alter; EXECUTE sql_str; OPEN mycursor; REPEAT FETCH mycursor INTO a,b; IF NOT done THEN set b=REPLACE(b,'[','1'); set b=REPLACE(b,']','1'); set b=REPLACE(b,' ','_'); set b=REPLACE(b,'/','dv'); set @sql_alter=CONCAT('alter table project_kpis add ',b,' varchar(256)'); PREPARE sql_str from @sql_alter; EXECUTE sql_str; END IF; UNTIL done END REPEAT; set done=0; CLOSE mycursor; OPEN projectcursor; projectcursor:LOOP FETCH projectcursor INTO c; IF done = 1 THEN LEAVE projectcursor; END IF; insert into project_kpis(project_id) values(c); open mycursor; mycursor:LOOP FETCH mycursor INTO a,b; IF done = 1 THEN LEAVE mycursor; end IF; set b=REPLACE(b,'[','1'); set b=REPLACE(b,']','1'); set b=REPLACE(b,' ','_'); set b=REPLACE(b,'/','dv'); set @project_id=c; set @formula_id=a; select case when value is NULL then '' else value END val into @kpi_value from v_dc_projectreport WHERE project_id=@project_id and formula_id=@formula_id and language_range='All_exclude_jp'; SET @sql_alter = CONCAT('UPDATE project_kpis set ',b,'="',@kpi_value,'" where project_id=',@project_id); PREPARE sql_str from @sql_alter; EXECUTE sql_str; end LOOP mycursor; CLOSE mycursor; SET done=0; END LOOP projectcursor; CLOSE projectcursor; END // DELIMITER ; DELIMITER // DROP PROCEDURE if EXISTS kpi_report_pro // CREATE PROCEDURE kpi_report_pro() BEGIN DROP table if EXISTS project_info; create table project_info as SELECT * from (SELECT A.*, B.project_year PROJECT_YEAR FROM ( SELECT id PROJECT_ID, NAME PROJECT_NAME, version VERSION FROM management_project ) A LEFT JOIN dc_task B on A.PROJECT_ID=B.project_id GROUP BY A.PROJECT_ID) C; ALTER TABLE project_info ENGINE=MyISAM; DROP table if EXISTS project_kpis; call update_report(); select * from project_info t,project_kpis p where t.PROJECT_ID=p.project_id; END // DELIMITER ; /* 調用存儲進程,存儲進程調用后產生兩張表,project_kpis和project_info 履行完后會輸出報表結果*/ CALL kpi_report_pro()


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产一二三四区中 | 福利片在线 | 精品久久久久久国产91 | www.在线观看视频 | 久操精品| 欧美日韩精品一区二区三区四区 | 亚洲成人精品久久 | 成人青草亚洲国产 | 久久久精品免费 | 国产免费69成人精品视频 | 国内精品免费一区二区三区 | 国产精品亚洲欧美日韩久久 | 国产福利片在线 易阳 | 免费看欧美毛片大片免费看 | 一区两区三不卡 | 日韩一级片免费在线观看 | 91四虎国自产在线播放线 | 欧美性猛交99久久久久99 | 精品国产第一页 | 欧美日韩高清一区 | 拔擦拔擦8x华人免费久久 | 影音先锋成人影院 | 在线观看免费精品国自产 | 日本久久影视 | 国产久视频观看 | 最近最新中文字幕免费大全3 | 亚洲一区色图 | 国产高清精品久久久久久久 | 人阁色第四影院在线观看 | 免费网站www网站免费 | 欧美黑人巨大videos精 | 国产精品久久久久久搜索 | 国产一区二区视频在线播放 | 亚洲国产日韩欧美一区二区三区 | 欧美一区二区三区综合色视频 | 国产亚洲视频在线播放大全 | 自拍偷自拍亚洲精品情侣 | 天堂网在线网站成人午夜网站 | 美国毛片在线观看 | 欧美性猛交xxxx免费看手交 | 国产毛片不卡 |