MySQL将行值与逗号等组合在一起

时间:2013-05-23 17:19:24

标签: mysql comma

我一直在敲打这个问题。主要是它不是要获得解决方案,但它是如何工作的。如果你能解释一下如何实现解决方案,那就太好了。

这只是示例数据,我正在使用带有内联SELECT语句的5个表。谢谢SQL大师。

样本表:

CREATE TABLE source
(
  product varchar(20),
  amount decimal
)

CREATE TABLE cat
(
  category varchar(20),
  product varchar(20)
)

插入样本数据:

INSERT INTO source (product, amount) VALUES
('product1', 1.00),
('product2', 2.00),
('product3', 1.50),
('product4', 5.25)

INSERT INTO cat (category, product) VALUES
('Shirts', 'product1'),
('Green Shirt', 'product1'),
('Gadget', 'product1'),
('Food', 'product2'),
('Games', 'product4')

我的试用查询:

DECLARE @categories varchar(200)
SET @categories = NULL

SELECT 
@categories = COALESCE(@categories + ',','') + cat.category
FROM cat

SELECT
DISTINCT source.product,
@categories
FROM cat
JOIN source on source.product = cat.product

输出

PRODUCT     COLUMN_1
product1    Shirts,Green Shirt,Gadget,Food,Games
product2    Shirts,Green Shirt,Gadget,Food,Games
product4    Shirts,Green Shirt,Gadget,Food,Games

期望的输出:

PRODUCT     COLUMN_1
product1    Shirts, Green Shirt, Gadget
product2    Gadget, Food
product4    Games

1 个答案:

答案 0 :(得分:4)

我认为这是您正在寻找的GROUP_CONCAT

SELECT
  source.product,
  GROUP_CONCAT(cat.category) cats
FROM cat
  JOIN source on source.product = cat.product
GROUP BY source.product

SQL Fiddle Demo

如果您尝试在每个类别之间添加',',请将SEPARATORGROUP_CONCAT一起使用。例如:

GROUP_CONCAT(cat.category separator ', ')