[英]pivoting mysql table doesnt work
我已經在這里閱讀了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
解決方案使用join
:
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';
您需要將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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.