我正在玩pdf中第6頁的Peter Brawley found here所寫文章中的一些代碼。我試圖弄清楚如何自動化它,以便過程的結果自動放置在select查詢中。現在我正在調用過程,將結果導出到文本文件中,手動進入文本文件(用鼠標點擊),複製結果並將其粘貼到select語句中。我一直無法知道如何將select語句插入到過程中,或者將過程放入我可以從select語句調用的數據庫或變量中的表中。有任何想法嗎?自動將被調用過程的結果放入select語句中
下面是從彼得·布勞利示例代碼,我一直在試圖自動化:
use database;
DROP PROCEDURE IF EXISTS writesumpivot;
DELIMITER |
CREATE PROCEDURE writesumpivot(
db CHAR(64), tbl CHAR(64), pivotcol CHAR(64), sumcol CHAR(64)
)
BEGIN
DECLARE datadelim CHAR(1) DEFAULT '"';
DECLARE comma CHAR(1) DEFAULT ',';
DECLARE singlequote CHAR(1) DEFAULT CHAR(39);
SET @sqlmode = (SELECT @@sql_mode);
SET @@sql_mode='';
SET @pivotstr = CONCAT('SELECT DISTINCT CONCAT(', singlequote,
',SUM(IF(', pivotcol, ' = ', datadelim, singlequote,
comma, pivotcol, comma, singlequote, datadelim,
comma, sumcol, ',0)) AS `',
singlequote, comma, pivotcol, comma, singlequote, '`',
singlequote, ') AS sumpivotarg FROM ', db, '.', tbl,
' WHERE ', pivotcol, ' IS NOT NULL');
-- UNCOMMENT TO SEE THET MIDLEVEL SQL:
-- SELECT @pivotstr;
PREPARE stmt FROM @pivotstr;
EXECUTE stmt;
drop prepare stmt;
SET @@[email protected];
END
|
DELIMITER ;
call writesumpivot('database', 'table', 'pivotcol','sumcol');
然後Select語句如下:
SELECT
infoField
[results of the call]
FROM
database.table
GROUP BY infoField;
假設我已經跑了調用,導出結果,複製它們並將它們粘貼到select語句中,我在SELECT查詢中調用的個人結果將如下所示:
SELECT
infoField
,SUM(IF(pivotcol = "Yellow",sumcol,0)) AS `Yellow`
,SUM(IF(pivotcol = "Red",sumcol,0)) AS `Red`
,SUM(IF(pivotcol = "Purple",sumcol,0)) AS `Purple`
,SUM(IF(pivotcol = "Orange",sumcol,0)) AS `Orange`
,SUM(IF(pivotcol = "Green",sumcol,0)) AS `Green`
,SUM(IF(pivotcol = "Blue",sumcol,0)) AS `Blue`
,SUM(IF(pivotcol = "White",sumcol,0)) AS `White`
FROM database.table
GROUP BY infoField;
運行上面的select語句給了我需要的數據透視表。我試圖弄清楚如何將其納入網站,這就是爲什麼它需要自動化。
我嘗試插入一個創建表,然後引用表,但沒有得到想要的結果。 編輯程序的最後一節,如下所示:
--SELECT @pivotstr;
DROP TABLE IF EXISTS temp2;
CREATE TABLE IF NOT EXISTS temp2(sumpivotarg varchar(8000));
PREPARE stmt FROM @pivotstr;
...
改變呼叫並選擇如下:從這個
call writesumpivot('database','table','pivotcol','sumcol');
insert into temp2(sumpivotarg) values(@pivotstr);
SELECT
table.infoField, temp2.sumpivotarg
FROM table, temp2
GROUP BY infoField
結果的通用代碼,而不是在數據庫中的單元格的內容總結。它看起來像這樣:
infoField | sumpivotarg < - Col標題
123 | SELECT DISTINCT CONCAT('Sum(if(pivotcol =「,pivotcol」,sumcol,0))AS
'pivotcol,'
')..124 | SELECT DISTINCT CONCAT('Sum(if(pivotcol =「,pivotcol」,sumcol,0))AS
'pivotcol,'
')..125 | SELECT DISTINCT CONCAT( 'SUM(IF(pivotcol = 「pivotcol」,sumcol,0))AS
'pivotcol,'
')..
請添加一些示例代碼 – jigfox 2010-07-09 17:09:56