MySQL - 如何根据另一列中的唯一值转置一列中的单元格?
Posted
技术标签:
【中文标题】MySQL - 如何根据另一列中的唯一值转置一列中的单元格?【英文标题】:MySQL - How To Transpose Cells In One Column Based On Unique Values In Another Column? 【发布时间】:2020-05-01 11:06:30 【问题描述】:我需要从 Magento 1.9 数据库中获取我们所有的产品类别并将其呈现在一行中,显示我设法获得的“产品 ID”、“产品类型”、“sku”和“类别路径”(ID 和值)以至于我的每个产品的所有类别都以多行形式返回。我当前的查询如下:
SELECT
p.entity_id AS 'product_id',
p.type_id AS 'product_type',
p.sku,
c.category_id,
l.level AS 'category_level',
l.path AS 'category_path',
n.name AS 'category_name'
FROM
mage_catalog_product_entity AS p
JOIN
mage_catalog_category_product_index AS c ON p.entity_id = c.product_id
JOIN
mage_catalog_category_entity AS l ON l.entity_id = c.category_id
JOIN
mage_catalog_category_flat_store_6 AS n ON n.path = l.path
WHERE
c.store_id = '6'
AND l.path LIKE '1/14%'
AND l.path NOT LIKE '1/14/207%'
AND l.path NOT LIKE '1/14/12/25%'
-- AND l.level > 1
ORDER BY p.sku , length(l.path)
它返回以下内容:
我想要达到的目标是这样的:
或者,理想情况下,将这些列合并为一个
有什么建议吗?
【问题讨论】:
请以文本形式附上结果,而不是屏幕截图。 【参考方案1】:您可以使用条件聚合来旋转您的结果集。
从您现有的查询开始,这里是按产品 ID、产品类型和 sku 分组的方法,并使用类别级别跨列传播类别名称:
SELECT
p.entity_id AS product_id,
p.type_id AS product_type,
p.sku,
max(l.level) AS category_level,
max(l.path) AS category_path,
max(case when l.level = 1 then n.name end) AS level1_category_name,
max(case when l.level = 2 then n.name end) AS level2_category_name,
max(case when l.level = 3 then n.name end) AS level3_category_name,
max(case when l.level = 4 then n.name end) AS level4_category_name
FROM
mage_catalog_product_entity AS p
JOIN
mage_catalog_category_product_index AS c ON p.entity_id = c.product_id
JOIN
mage_catalog_category_entity AS l ON l.entity_id = c.category_id
JOIN
mage_catalog_category_flat_store_6 AS n ON n.path = l.path
WHERE
c.store_id = '6'
AND l.path LIKE '1/14%'
AND l.path NOT LIKE '1/14/207%'
AND l.path NOT LIKE '1/14/12/25%'
GROUP BY product_id, p.entity_id, p.sku
ORDER BY p.sku
旁注:列别名不要使用单引号;虽然某些数据库可能支持这一点,但 SQL 标准规定单引号用于文字字符串。为您的数据库使用正确的引用字符,或者最好使用不需要引用的别名。
【讨论】:
好的,谢谢。但是,这只会为每个产品返回一个类别。在某些情况下,产品可以属于多个类别。我们如何在不同的行上输出所有类别路径?以上是关于MySQL - 如何根据另一列中的唯一值转置一列中的单元格?的主要内容,如果未能解决你的问题,请参考以下文章