如何在sql中合并两行? [重复]

问题描述 投票:0回答:1

下面是我的桌子的详细信息。

show tables;
+-------------------+
| Tables_in_db      |
+-------------------+
| bus_type          |
| op_bus            |
| op_names          |
+-------------------+
3 rows in set (0.01 sec)

mysql> select * from bus_type;
+-------------+----------------+
| bus_type_id | bus_type_name  |
+-------------+----------------+
|         101 | AC             |
|         102 | Non AC         |
|         103 | Non AC Sleeper |
|         104 | AC Sleeper     |
|         105 | MINI Bus       |
|         106 | TT             |
+-------------+----------------+
6 rows in set (0.00 sec)

mysql> select * from op_bus;
+-----------+-------+-------------+
| op_bus_id | op_id | bus_type_id |
+-----------+-------+-------------+
|         1 |     1 |         101 |
|         2 |     1 |         102 |
|         3 |     2 |         104 |
|         4 |     2 |         103 |
+-----------+-------+-------------+
4 rows in set (0.00 sec)

mysql> select * from op_names;
+-------+---------+
| op_id | op_name |
+-------+---------+
|     1 | VRL     |
|     2 | SRS     |
+-------+---------+
2 rows in set (0.01 sec)

我想要如下输出

+---------+--------------------------------+
| op_name | bus_type_name                  |
+---------+--------------------------------+
| VRL     | AC,Non AC                      |
| SRS     | AC Sleeper, Non AC Sleeper     |
+---------+--------------------------------+    

我正在尝试获取操作符名称以及总线类型,如果bus_operator具有不同的总线类型,则应将其显示在一行中。

我尝试了以下查询,并获得了不同的输出。

mysql> select op.op_name, bt.bus_type_name from op_bus as ob inner join op_names as op on ob.op_id=op.op_id inner join bus_type as bt on ob.bus_type_id=bt.bus_type_id group by op.op_name,bus_type_name;
+---------+----------------+
| op_name | bus_type_name  |
+---------+----------------+
| VRL     | AC             |
| VRL     | Non AC         |
| SRS     | AC Sleeper     |
| SRS     | Non AC Sleeper |
+---------+----------------+
4 rows in set (0.00 sec)

我也尝试通过op_name分组,它给出了错误提示

select op.op_name, bt.bus_type_name from op_bus as ob inner join op_names as op on ob.op_id=op.op_id inner join bus_type as bt on ob.bus_type_id=bt.bus_type_id group by op.op_name,bus_type_name group by op.op_name;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by op.op_name' at line 1
mysql sql group-by inner-join
1个回答
0
投票

Group concat可能是您在这里寻找的。这可能会有所帮助:MySQL : Multiple row as comma separated single row

© www.soinside.com 2019 - 2024. All rights reserved.