gpt4 book ai didi

php - MySQL 或 PHP 将行动态转换为列

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

好的,我有一个如下所示的销售表:

Prod_ID | Store_ID | Date_Sold  | Num_Sold105     | 1010     | 2012-09-21 | 50105     | 1011     | 2012-09-22 | 20105     | 1012     | 2012-09-22 | 35............................................109     | 1010     | 2012-09-21 | 25109     | 1011     | 2012-09-23 | 15109     | 1012     | 2012-09-23 | 30

我想创建一个如下所示的新表或 View :

Store_ID | 105 | ... | 1091010     | 50  | ... | 251011     | 20  | ... | 151012     | 35  | ... | 30

我不太确定如何完成此操作。我已经看到人们在哪里对此进行硬编码,但我不想这样做,因为我有超过 50 个不同的 Prod_ID,而且它们在不断变化。有没有办法动态地做到这一点?我将通过 PHP 在网页上显示此数据,所以也许有更简单的方法使用 PHP 来完成此操作?如果这个解释不清楚,请告诉我。

提前致谢!

最佳答案

在 MySQL 中,您需要使用 prepared statement PIVOT 数据。由于 MySQL 没有 PIVOT 函数,因此您需要使用聚合函数和 CASE:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when Prod_ID = ''',
Prod_ID,
''' then Num_Sold end) AS ''',
Prod_ID, ''''
)
) INTO @sql
FROM yourtable;

SET @sql = CONCAT('SELECT store_id, ', @sql, '
FROM yourtable
GROUP BY store_id');

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

参见 SQL Fiddle with Demo

如果您有已知数量的列,那么您将对类似于以下的值进行硬编码:

select store_id,
sum(case when prod_id = 105 then Num_Sold end) as '105',
sum(case when prod_id = 109 then Num_Sold end) as '109'
from yourtable
group by store_id

参见 SQL Fiddle with Demo

关于php - MySQL 或 PHP 将行动态转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713824/

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