色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql 縱表轉橫表函數

夏志豪2年前11瀏覽0評論

MySQL中的縱表轉橫表是常見的需求,它可以將多個表中的行轉化為列,這樣可以更加方便的進行數據的分析和處理。我們可以使用MySQL的自定義函數來實現這個轉化過程。

下面我們來看一下具體的實現方法,我們需要自定義兩個函數:一個用來獲取列名,另一個用來生成動態的SQL語句。具體代碼如下:

DELIMITER $$
CREATE FUNCTION `get_row_names`(table_name VARCHAR(100)) RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE sql_string TEXT;
SET sql_string = '';
SELECT GROUP_CONCAT(DISTINCT CONCAT('`',column_name,'`'))
INTO sql_string
FROM information_schema.columns
WHERE table_name = table_name
AND table_schema = DATABASE();
RETURN sql_string;
END$$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION `vertical_to_horizontal`(table_list TEXT) RETURNS TEXT
BEGIN
DECLARE sql_string TEXT;
SET sql_string = CONCAT("SELECT ", get_row_names(table_list), "
FROM ", table_list, "
GROUP BY ", get_row_names(table_list));
RETURN sql_string;
END$$
DELIMITER ;

以上是用來創建函數的代碼,在使用時可以進行簡單的封裝。例如下面的代碼可以將多張表轉化為橫表:

DELIMITER $$
CREATE PROCEDURE `trans_data_table` (in_table_list TEXT, out_table_name VARCHAR(100))
BEGIN
DECLARE sql_string TEXT;
SET sql_string = CONCAT('CREATE TABLE IF NOT EXISTS ', out_table_name , ' AS ', vertical_to_horizontal(in_table_list));
PREPARE stmt FROM sql_string;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

以上封裝了縱表轉橫表需要用到的函數,有了這些函數,我們就可以更加方便的對數據進行處理了。