数据透视mysql表不起作用
我已经在这里读了很多书和很多话题,但仍然不明白为什么我不能让它工作 我有一个非常简单的表(productProperties pp),有三列:数据透视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',
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';