【数据库-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;

发布了389 篇原创文章 · 获赞 72 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/chenlu5201314/article/details/104519814