【數據庫-MySql】將單列數據轉化爲多列數據

數據準備 [source_table]

id data_title group_title sex
24144 毅立 木火
24145 毅亮 木火
24146 毅南 木火
24147 毅泰 木火
24148 毅天 木火
24149 毅廷 木火
24150 毅曦 木火
24151 毅璽 木火
24152 毅烜 木火
24153 毅曜 木火
24154 毅耀 木火
24155 毅昱 木火
24156 毅章 木火
24157 毅兆 木火
24158 毅臻 木火
24159 毅中 木火
24160 毅重 木火
24161 毅左 木火
24162 昂才 木金
24163 昂成 木金
24164 昂川 木金
24165 昂賜 木金
24166 昂存 木金
24167 昂度 木金
24168 昂庚 木金
24169 昂劍 木金
24170 昂仁 木金
24171 昂儒 木金
24172 昂少 木金
24173 昂世 木金

第一步、排序設置編號

-- 將所有編號增加到現有總數的之上
UPDATE source_table,(SELECT COUNT(*) as cnt FROM source_table) as a SET id =id + a.cnt +1;
-- 更具排序重新賦予新的編號
UPDATE source_table, (
		SELECT tmpTableA.* FROM (
			SELECT 
				(@i:=@i+1) as `index`, 
				source_table.* 
			FROM source_table, (SELECT @i:=0) as i            
			ORDER BY sex,`group_title`,`data_title` ASC
		)AS tmpTableA
	) AS tmpTableB
SET source_table.id = tmpTableB.`index` 
WHERE source_table.id = tmpTableB.id;

第二步、將數據生成多列csv格式數據

-- id MOD 36 將同組數據分成36行
SELECT 
	CONCAT(RowName, ',', RowData) AS csvdata
FROM (
		SELECT
      id MOD 36 AS RowIndex,
			`group_title` AS RowName,
			GROUP_CONCAT(DISTINCT `data_title` ORDER BY `data_title` DESC SEPARATOR ',') AS RowData
		FROM source_table 
		WHERE sex = '男'
		GROUP BY RowIndex,RowName
		ORDER BY RowName
	) as tmpTable;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章