忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 507 | 回复: 1

mysql 多行合并成一行 [复制链接]

论坛徽章:
0
发表于 2017-05-26 17:05 |显示全部楼层
我这有原始数据类似这样的
cg_name rset type volume vol_size
name1 set1 name1_local dev1 20
name1 set1 name1_prod dev2 20
name1 set1 name1_remote dev3 20
name1 N/A name1_local_journal dev4 100
name1 N/Aname1_ local_journal dev5 100
name1 N/Aname1_ prod_journal dev6 50
name1 N/A name1_remote_journal dev7 80
name1 N/Aname1_ remote_journal dev8 100
name1 set2 ...格式和以上类似
name1 set3 ...格式和以上类似
name2 set1 ...格式和以上类似





我想要用mysql语句直接查出来这样的输出,
cg_name rset local prod remote size local_journalsize prod_journal sizeremote_journal size
name1 set1 dev1 dev2 dev3 20 dev4 100 dev6 50 dev7 80
name1 set2 dev9 dev10 dev1130 dev5 100 dev13 100 dev8 100
name1 set3 dev24 dev25 dev26 50 dev12 80 dev14 100
dev15 100 dev17 80
dev16 100
name2 set1 dev18 dev19 dev20 100 dev21 100 dev22 100 dev23 100
...












原始表数据cg_name有很多值,rset从set0-set(n)不等,type类型就6种,local、prod、remote、local_journal,prod_journal,remote_journal。每一个set肯定有local、prod、remote一一对应,并且大小一样。Journal的数量不一定,大小也不一定。

用语句能实现上面的功能吗?

论坛徽章:
89
CU大牛徽章
日期:2013-11-29 22:26:36CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2014-02-21 14:22:02CU大牛徽章
日期:2014-02-21 14:22:07CU大牛徽章
日期:2014-02-21 14:22:09CU大牛徽章
日期:2015-02-28 17:45:342015元宵节徽章
日期:2015-03-06 16:56:38羊年新春福章
日期:2015-02-28 17:42:522015七夕节徽章
日期:2015-09-14 09:24:55CU大牛徽章
日期:2014-02-21 14:22:44CU大牛徽章
日期:2015-02-28 17:48:12CU大牛徽章
日期:2015-02-28 17:47:58
发表于 2017-05-31 18:03 |显示全部楼层
回复 1# lanfeng356
大概参考一下吧:
  1. mysql> select * from tb5;
  2. +---------+------+----------------------+--------+----------+
  3. | cg_name | rset | type                 | volume | vol_size |
  4. +---------+------+----------------------+--------+----------+
  5. | name1   | set1 | name1_local          | dev1   |       20 |
  6. | name1   | set1 | name1_prod           | dev2   |       20 |
  7. | name1   | set1 | name1_remote         | dev3   |       20 |
  8. | name1   | N/A  | name1_local_journal  | dev4   |      100 |
  9. | name1   | N/A  | name1_local_journal  | dev5   |      100 |
  10. | name1   | N/A  | name1_prod_journal   | dev6   |       50 |
  11. | name1   | N/A  | name1_remote_journal | dev7   |       80 |
  12. | name1   | N/A  | name1_remote_journal | dev8   |      100 |
  13. +---------+------+----------------------+--------+----------+
  14. 8 rows in set

  15. mysql> select
  16.     cg_name,
  17.     rset,
  18.     max(if(type like "%_local",  volume, ""))  as local,
  19.     max(if(type like "%_prod",   volume, ""))  as prod,
  20.     max(if(type like "%_remote", volume, ""))  as remote,
  21.     max(if(type like "%_remote", vol_size, 0)) as remote_size,
  22.     max(if(type like "%_local_journal",  volume, ""))  as local_journal,
  23.     max(if(type like "%_local_journal",  vol_size, 0)) local_journal_size,
  24.     max(if(type like "%_prod_journal",   volume, ""))  as prod_journal,
  25.     max(if(type like "%_prod_journal",   vol_size, 0)) as prod_journal_size,
  26.     max(if(type like "%_remote_journal", volume, ""))  as local_journal,
  27.     max(if(type like "%_remote_journal", vol_size, 0)) as local_journal_size
  28. from tb5
  29. group by cg_name, rset;
  30. +---------+------+-------+------+--------+-------------+---------------+--------------------+--------------+-------------------+---------------+--------------------+
  31. | cg_name | rset | local | prod | remote | remote_size | local_journal | local_journal_size | prod_journal | prod_journal_size | local_journal | local_journal_size |
  32. +---------+------+-------+------+--------+-------------+---------------+--------------------+--------------+-------------------+---------------+--------------------+
  33. | name1   | N/A  |       |      |        |           0 | dev5          |                100 | dev6         |                50 | dev8          |                100 |
  34. | name1   | set1 | dev1  | dev2 | dev3   |          20 |               |                  0 |              |                 0 |               |                  0 |
  35. +---------+------+-------+------+--------+-------------+---------------+--------------------+--------------+-------------------+---------------+--------------------+
  36. 2 rows in set
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票6.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP