gpt4 book ai didi

MySQL 动态枢轴

转载 作者:行者123 更新时间:2023-11-29 23:13:13 25 4
gpt4 key购买 nike

我有一个这样的产品零件表:

零件

part_id      part_type      product_id
--------------------------------------
1 A 1
2 B 1
3 A 2
4 B 2
5 A 3
6 B 3

我想要一个将返回如下表的查询:

product_id      part_A_id      part_B_id
----------------------------------------
1 1 2
2 3 4
3 5 6

在实际实现中将有数百万个产品部件

最佳答案

遗憾的是,MySQL 没有 PIVOT 函数,但您可以使用聚合函数和 CASE 语句对其进行建模。对于动态版本,您将需要使用准备好的语句:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when part_type = ''',
part_type,
''' then part_id end) AS part_',
part_type, '_id'
)
) INTO @sql
FROM
parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, '
FROM parts
GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

参见SQL Fiddle With Demo

如果您只有几列,那么您可以使用静态版本:

select product_id,
max(case when part_type ='A' then part_id end) as Part_A_Id,
max(case when part_type ='B' then part_id end) as Part_B_Id
from parts
group by product_id

关于MySQL 动态枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27980806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com