SQL 转换表格 -> 将重复属性更改为列

3
我可以帮助您进行翻译。以下是您需要翻译的内容:

我正在使用WooCommerce创建一个网站,我想将其与我的仓库集成。

我需要转换一个看起来像这样的表格:

   ----------------------------
id |post_id| meta_key|meta_value |
   ----------------------------
 1 | 1     |_stock   |1          |
 2 | 1     |_price   |10         |
 3 | 1     |X        |X          |
 4 | 2     |_stock   |2          |
 5 | 2     |_price   |8          |
 6 | 2     |X        |X          |

into:

   -------------------------
   |post id|_stock | _price  |
   -------------------------
   | 1     |1      |10       |
   | 2     |2      |8        |

我尝试过:

SELECT post_id, meta_value AS stock
FROM wp_postmeta
JOIN
(
SELECT post_id, meta_value AS regular_price
FROM wp_postmeta
WHERE wp_postmeta.meta_key = '_regular_price' 
)
WHERE wp_postmeta.meta_key = '_stock'
ORDER BY post_id ASC

并收到以下错误:

'#1248 - 每个派生表都必须有自己的别名'

是否有避免使用create table的方法?

我刚开始接触 SQL ,如果答案很明显,请不要介意。如果标题有误,请见谅。

谢谢您提前。


由于您正在对同一张表使用子查询,因此需要使用表别名(软重命名)来引用唯一的列:SELECT w.post_id FROM wp_postmeta AS wAS是可选的,w是别名)。您正在做的被称为数据透视表 - Joop Eggen
1个回答

3

只需使用条件聚合:

select post_id,
       max(case when meta_key = '_stock' then meta_value end) as stock,
       max(case when meta_key = '_regular_price' then meta_value end) as regular_price
from wp_postmeta
where meta_key in ('_stock', '_regular_price')
group by post_id;

1
你很棒。非常感谢! - Rafae Rafad
不好意思,@Gordon Linoff,你为什么用 max 而不是 sum - D-Shih
1
@D-Shih . . . 这个值是一个字符串,所以 sum() 可能不适用。另外,我认为应该只有一个值。 - Gordon Linoff
@GordonLinoff 我知道了,谢谢 :) - D-Shih

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接