免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2528 | 回复: 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的数量不一定,大小也不一定。

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

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 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号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP