数据透视mysql表不起作用

数据透视mysql表不起作用,mysql,pivot,Mysql,Pivot,我已经在这里读了很多书和很多话题,但仍然不明白为什么我不能让它工作 我有一个非常简单的表(productProperties pp),有三列: prodName propName propValue 我希望查询,以便将其表示为(例如) 我尝试的是: select pp.prodName, CASE pp.propName WHEN 'Color' THEN pp.propValue ELSE NULL END as 'Color',

我已经在这里读了很多书和很多话题,但仍然不明白为什么我不能让它工作

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

prodName propName propValue
我希望查询,以便将其表示为(例如)

我尝试的是:

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之外的所有空值

例如:

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

您需要将案例包装到
组中\u CONCAT()


使用
连接的解决方案

select distinct pp1.prodName, 
       pp2.propValue as 'Color', 
       pp3.propValue as 'Adhesive', 
       pp4.propValue as 'Weight' 
from ProductsProperties pp1 
  left join ProductsProperties pp2 on pp1.prodName = pp2.prodName and pp2.propName = 'Color'
  left join ProductsProperties pp3 on pp1.prodName = pp3.prodName and pp3.propName = 'Adhesive'
  left join ProductsProperties pp4 on pp1.prodName = pp4.prodName and pp4.propName = 'Weight';

我修复了sql:第一个版本使用了内部连接而不是左连接。我看到有人使用了组_CONCAT()的下一票解决方案。与连接相比,它是否有一些缺陷?如果组_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;
select distinct pp1.prodName, 
       pp2.propValue as 'Color', 
       pp3.propValue as 'Adhesive', 
       pp4.propValue as 'Weight' 
from ProductsProperties pp1 
  left join ProductsProperties pp2 on pp1.prodName = pp2.prodName and pp2.propName = 'Color'
  left join ProductsProperties pp3 on pp1.prodName = pp3.prodName and pp3.propName = 'Adhesive'
  left join ProductsProperties pp4 on pp1.prodName = pp4.prodName and pp4.propName = 'Weight';