在mysql中使用子查询获取逗号分隔列表

在mysql中使用子查询获取逗号分隔列表,mysql,Mysql,我显示了截至特定日期的可用部件数量和库存历史成本数据。使用下面的查询可以很好地工作 SELECT s.part_id, sum(s.updated_quantity), p.item_code, sum( (SELECT (s.updated_quantity * cost) FROM inventory WHERE inventory.id=s.inv_id)) AS t

我显示了截至特定日期的可用部件数量和库存历史成本数据。使用下面的查询可以很好地工作

SELECT s.part_id,
       sum(s.updated_quantity),
       p.item_code,
       sum(
             (SELECT (s.updated_quantity * cost)
              FROM inventory
              WHERE inventory.id=s.inv_id)) AS tcost
FROM status_history AS s,
     inventory AS i,
     part_master AS p
WHERE s.action='add'
  AND DATE(s.date_created)<='2013-04-09'
  AND i.currency_id=1
  AND s.inv_id=i.id
  AND s.part_id=p.id
GROUP BY s.part_id
我还想在单个字段中显示用逗号分隔的组件的位置名称。为了得到我想要的结果,我尝试了下面的查询,但它只返回一个位置名,而不是多个位置名的逗号分隔字符串

SELECT s.part_id,
       sum(s.updated_quantity),
       p.item_code,
       sum(
             (SELECT (s.updated_quantity * cost)
              FROM inventory
              WHERE inventory.id=s.inv_id)) AS tcost,
       CONCAT_WS(',',
                   (SELECT name
                    FROM location_master
                    WHERE id=i.location_id)) AS LOCATION
FROM status_history AS s,
     inventory AS i,
     part_master AS p
WHERE s.action='add'
  AND DATE(s.date_created)<='2013-04-09'
  AND i.currency_id=1
  AND s.inv_id=i.id
  AND s.part_id=p.id
GROUP BY s.part_id

请看以下示例:

mysql> select Country,Abbreviation from Country;
+--------------------------+--------------+
| Country                  | Abbreviation |
+--------------------------+--------------+
| INDIA                    | ID           |
| Canada                   | CAN          |
| Australiya               | AUS          |
| United Kingdom           | UK           |
| United States Of America | USA          |
| PAKISTAN                 | PAK          |
| MILAN                    | Panchal      |
| MILAN                    | Panchal      |
| JAPAN                    | JP           |
+--------------------------+--------------+
9 rows in set (0.00 sec)
潘查有两条记录

按缩写分组将仅显示1条记录

mysql>按缩写从国家组中选择国家、缩写

+--------------------------+--------------+
| Country                  | Abbreviation |
+--------------------------+--------------+
| Australiya               | AUS          |
| Canada                   | CAN          |
| INDIA                    | ID           |
| JAPAN                    | JP           |
| PAKISTAN                 | PAK          |
| MILAN                    | Panchal      |
| United Kingdom           | UK           |
| United States Of America | USA          |
+--------------------------+--------------+
+--------------------------+--------------+
| GROUP_CONCAT(Country)    | Abbreviation |
+--------------------------+--------------+
| Australiya               | AUS          |
| Canada                   | CAN          |
| INDIA                    | ID           |
| JAPAN                    | JP           |
| PAKISTAN                 | PAK          |
| MILAN,MILAN              | Panchal      |
| United Kingdom           | UK           |
| United States Of America | USA          |
+--------------------------+--------------+
国家/地区上的组将显示逗号分隔的值

mysql>选择GROUP_CONCATCountry,按缩写从国家组中选择缩写

+--------------------------+--------------+
| Country                  | Abbreviation |
+--------------------------+--------------+
| Australiya               | AUS          |
| Canada                   | CAN          |
| INDIA                    | ID           |
| JAPAN                    | JP           |
| PAKISTAN                 | PAK          |
| MILAN                    | Panchal      |
| United Kingdom           | UK           |
| United States Of America | USA          |
+--------------------------+--------------+
+--------------------------+--------------+
| GROUP_CONCAT(Country)    | Abbreviation |
+--------------------------+--------------+
| Australiya               | AUS          |
| Canada                   | CAN          |
| INDIA                    | ID           |
| JAPAN                    | JP           |
| PAKISTAN                 | PAK          |
| MILAN,MILAN              | Panchal      |
| United Kingdom           | UK           |
| United States Of America | USA          |
+--------------------------+--------------+
从顶部看第6条记录。因为它包含逗号分隔的值

要了解有关GROUP_CONCAT函数的更多信息,请参见下面的查询显示重复数据:

下面的查询显示不同的数据: