MySQL數據庫中的橫表就是指豎向排列的數據通過類似于EXCEL中的'行列轉換'操作,將其變更為橫向排列的表格形式。而動態橫表轉置又稱為“動態透視表”,是指在沒有固定列的情況下,將豎向數據轉化為動態的橫向表格形式。這樣可以方便地進行數據的統計和分析。
CREATE PROCEDURE SP_GET_PERSON_RECORDS(IN DATEFROM date, IN DATETO date) BEGIN DECLARE SQLString varchar(4000); DECLARE Rows varchar(250); DECLARE result varchar(4000); SET @SQLString = ''; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(date = ''', date, ''', COUNT, 0)) AS ', DATE_FORMAT(date, '%d-%m-%Y') ) ) INTO @Columns FROM person_records WHERE date BETWEEN DATEFROM AND DATETO; SET @SQLString = CONCAT( 'SELECT name, ', @Columns, ' FROM person_records WHERE date BETWEEN ''', DATEFROM, ''' AND ''', DATETO, ''' GROUP BY name '); PREPARE stmt FROM @SQLString; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
以上代碼中定義了一個存儲過程,用于將給定日期內的人員的記錄轉換為動態的橫向表格形式。通過將記錄行的“日期”列中的不同日期作為“列”的名稱,并使用計數器統計值進行填充,最后將每個人員的匯總轉換到行集中,這個過程實現了橫向表格的轉換。存儲過程接受兩個參數,即DATETFROM和DATETO,其將提取此日期范圍內的所有記錄并生成動態橫向表格。