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

ChinaUnix.net

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


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

本版积分规则

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP