我已经为此苦苦思索了一段时间。主要不是获得解决方案,而是解决方案的工作原理。如果您能解释解决方案的实现方式,那就太好了。
这只是示例数据,我正在处理 5 个带有内联 SELECT 语句的表。谢谢 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
最佳答案
我认为这就是您使用 GROUP_CONCAT
寻找的内容:
SELECT
source.product,
GROUP_CONCAT(cat.category) cats
FROM cat
JOIN source on source.product = cat.product
GROUP BY source.product
如果您试图在每个类别之间使用“,”,请使用 SEPARATOR
和 GROUP_CONCAT
。例如:
GROUP_CONCAT(cat.category separator ', ')
关于MySQL 用逗号等组合行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720129/