tA表查询如下
查询结果如下:
ID ContentID FieldName FieldValue
11城市北京
21URLbeijing.com
31排序1
42城市上海
52URLshanghai.com
62排序2
想实现转换后是如下的效果
ContentID URL 城市 排序
1 beijing.com 北京 1
2 shanghai.com 上海 2
每个contentID对应一行记录
解答:SELECT SUBSTRING(VAL_, 1, LOCATE(VAL_, ',', 1)) AS 'URL', SUBSTRING(VAL_, LOCATE(VAL_, ',', 1) + 1) AS '排序' FROM -- 按 逗号 分割 截取字符串 得到 URL 部分 和 剩余部分(即 排序部分) (具体 INDEX 可能不对, 自己调整)(SELECT SUBSTRING(VAL_, 1, LOCATE(VAL_, ',', 1)) AS '城市', SUBSTRING(VAL_, LOCATE(VAL_, ',', 1) + 1) AS VAL_ FROM -- 按 逗号 分割 截取字符串 得到 城市部分 和 剩余部分 (具体 INDEX 可能不对, 自己调整)(SELECT GROUP_CONCAT( FIELDVALUE ORDER BY ID SEPARATOR ',' ) AS VAL_ FROM -- 用 GROUP_CONCAT 函数 把 FIELDVALUE 字段 合并起来, 按 ID 排序, 用 逗号 分割.(SELECT ID, FLOOR( (ID - 1) / 3 ) AS ID_, FIELDVALUE FROM -- 把 ID 分组 转换成 相同的值 (这里用了 除以 3 取整) (如果不连续用 ROWNUM) (如果有其他字段能够 将 1,2,3 归为一组那么更好)(SELECT T1.ID, T2.FIELDNAME, T1.FIELDVALUE FROM ACTCOMMUNITYDB.RM_CONTENTVALUE T1 INNER JOIN ACTCOMMUNITYDB.RM_CONTENTFIELD T2 /* WHERE */ ON (T1.FIELDID = T2.ID)) --原语句) GROUP BY ID_))