1

我一直在努力解决这个问题。主要不是关于获得解决方案,而是它是如何工作的。如果您能解释解决方案是如何实现的,那就太好了。

这只是示例数据,我正在使用 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
4

1 回答 1

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 小提琴演示

如果您想在每个类别之间添加一个 ', ',请使用SEPARATORwith GROUP_CONCAT。例如:

GROUP_CONCAT(cat.category separator ', ')
于 2013-05-23T17:22:52.887 回答