首页 新闻 会员 周边 捐助

MySql行转列列转行

0
悬赏园豆:10 [已解决问题] 解决于 2015-02-13 14:19

 tA表查询如下

查询结果如下:

ID     ContentID   FieldName            FieldValue

 

1       1                 城市                         北京                       
2 1 URL beijing.com
3 1 排序 1
4 2 城市 上海
5 2 URL shanghai.com
6 2 排序 2

 

想实现转换后是如下的效果

ContentID           URL                          城市        排序  

1                       beijing.com                北京          1

2                       shanghai.com             上海          2

 

每个contentID对应一行记录

麦田清风的主页 麦田清风 | 初学一级 | 园豆:7
提问于:2015-02-12 20:02
< >
分享
最佳答案
1

为啥不能是

北京 shanghai.com  1

上海 beijing.com     2

 

我的意思是, 你的题目缺少条件, 并不能确认  北京 beijing.com 1 就一定是一组.

收获园豆:10
过于执著 | 菜鸟二级 |园豆:339 | 2015-02-13 09:11

把你的条件添加上,

比如 它们有一个共同的属性相同.

过于执著 | 园豆:339 (菜鸟二级) | 2015-02-13 09:12

已经在问题上修改

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 11:13

@new_ITP: 你的意思是 按照 ID 排序 3个 一组?

中间会有没有 不连续的?

过于执著 | 园豆:339 (菜鸟二级) | 2015-02-13 11:26

@过于执著: 有QQ吗,或者加我QQ:962990887

因为这里截不了图

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 11:34

@new_ITP: 

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_))
过于执著 | 园豆:339 (菜鸟二级) | 2015-02-13 12:13

@过于执著: 抱歉,由于业务逻辑复杂,所以理解错意思了,题目已经重新修改好了,麻烦看看

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 13:57

@过于执著: 已经解决了

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 14:19

@new_ITP: 有 ContentID  这么好一字段不拿出来 (何必让我用 ID / 3),

GROUP_CONCAT 时按 FIELDVALUE 排序即可.

过于执著 | 园豆:339 (菜鸟二级) | 2015-02-13 14:26

@过于执著: 不好意思,逻辑有点复杂,理解错意了

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 14:26

@过于执著: 对的,我自己已经写好了,经过从昨晚到现在研究行转列,contentID一弄出来就好办了

麦田清风 | 园豆:7 (初学一级) | 2015-02-13 14:27

现在回头再看这个问题,当时好挫

 

为啥不能是

北京 shanghai.com  1

上海 beijing.com     2

 

我的意思是, 你的题目缺少条件, 并不能确认  北京 beijing.com 1 就一定是一组.

这个回答我现在才注意到并且明白了。。。

 

麦田清风 | 园豆:7 (初学一级) | 2016-06-20 14:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册