我已经在这里阅读了 artfulsoftware 和许多主题,但仍然无法弄清楚为什么我不能让它工作。

我有一个非常简单的表(productProperties pp),包含三列:

prodName propName propValue

我想查询所以它会被表示为(例如)
prodName Color  Weight Adhesive
nail1    black  1lbs   3m
nail2    silver 0.5lbs 3m

我试过的:
select
    pp.prodName,
     CASE pp.propName
        WHEN 'Color' THEN pp.propValue
        ELSE NULL
    END as 'Color',

   CASE pp.propName
        WHEN 'Weight' THEN pp.propValue
        ELSE NULL
    END as 'Weight',

   CASE pp.propName
        WHEN 'Adhesive' THEN pp.propValue
        ELSE NULL
    END as 'Adhesive'
from
    ProductsProperties as pp
group by pp.prodName;

除了 prodName 之外,我还获得了所有 NULL

例如:
prodName propName   propValue
nail1    Color      black
nail1    Adhesive   3M
nail2    Weight     1lbs
nail3    Color      black
nail3    Adhesive   3M
nail5    Weight     1lbs

以上查询结果为:
 prodName, Color,   Weight, Adhesive
 nail1,    black,   NULL,   NULL
 nail2,    NULL,    1lbs,   NULL
 nail3,    black,   NULL,   NULL
 nail5,    NULL,    1lbs,   NULL

最佳答案

您需要将 CASE 包装到 GROUP_CONCAT() 中:

SELECT
    pp.prodName,
    GROUP_CONCAT(DISTINCT CASE pp.propName
        WHEN 'Color' THEN pp.propValue
        ELSE NULL
    END) AS'Color',

    GROUP_CONCAT(DISTINCT CASE pp.propName
        WHEN 'Weight' THEN pp.propValue
        ELSE NULL
    END) AS 'Weight',

    GROUP_CONCAT(DISTINCT CASE pp.propName
        WHEN 'Adhesive' THEN pp.propValue
        ELSE NULL
    END) AS 'Adhesive'
FROM
    ProductsProperties AS pp
GROUP BY pp.prodName;

关于mysql - 旋转 mysql 表不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31611014/

10-12 12:40