好的,我的销售表看起来像这样:
Prod_ID | Store_ID | Date_Sold | Num_Sold 105 | 1010 | 2012-09-21 | 50 105 | 1011 | 2012-09-22 | 20 105 | 1012 | 2012-09-22 | 35 ............................................ 109 | 1010 | 2012-09-21 | 25 109 | 1011 | 2012-09-23 | 15 109 | 1012 | 2012-09-23 | 30
我想创建一个如下所示的新表或视图:
Store_ID | 105 | ... | 109 1010 | 50 | ... | 25 1011 | 20 | ... | 15 1012 | 35 | ... | 30
我不确定如何做到这一点。我已经看到人们在哪里硬编码,但我不想这样做,因为我有50多个不同的Prod_ID并且它们在不断变化。有没有办法动态地这个?我将通过PHP在网页上显示这些数据,所以也许有一种更简单的方法来使用PHP?如果这个解释不清楚,请告诉我。
提前致谢!!
答案 0 :(得分:2)
在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;
如果您有一个已知数量的列,那么您将硬编码与此类似的值:
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
答案 1 :(得分:1)
所以上面的视图是MySQL中的输出。 PHP允许您根据需要布置数据并解决您的问题。你可以在一个表中创建一个重复的行(html用于布局,php用于重复),并在该表中放置通过PHP调用的MySQL语句的输出。
这里有很多代码用于设置MySQL连接(PHP),当然也包括你的表格(HTML)。