【问题标题】:How to combine two row in sql? [duplicate]如何在sql中合并两行? [复制]
【发布时间】:2020-02-21 02:59:02
【问题描述】:

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

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     |
+---------+--------------------------------+    

我正在尝试获取 operator_name 以及总线类型,如果 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

【问题讨论】:

  • select op.op_name, GROUP_CONCAT(DISTINCT bt.bus_type_name SEPARATOR ', ') as 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;

标签: mysql sql group-by inner-join


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2011-02-25
    • 2023-02-19
    • 2017-01-31
    • 2014-02-05
    • 2010-10-16
    • 2017-08-12
    相关资源
    最近更新 更多