zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySql Povit_MySQL pivot row成动态列数「建议收藏」

mysql 建议 收藏 动态 row pivot 列数
2023-06-13 09:15:11 时间

杨魅力

不幸的是,MySQL没有PIVOT基本上你想要做的功能。因此,您需要使用带有CASE语句的聚合函数:select pt.partner_name,

count(case when pd.product_name = ‘Product A’ THEN 1 END) ProductA,

count(case when pd.product_name = ‘Product B’ THEN 1 END) ProductB,

count(case when pd.product_name = ‘Product C’ THEN 1 END) ProductC,

count(case when pd.product_name = ‘Product D’ THEN 1 END) ProductD,

count(case when pd.product_name = ‘Product E’ THEN 1 END) ProductEfrom partners ptleft join sales s

on pt.part_id = s.partner_idleft join products pd on s.product_id = pd.prod_idgroup by pt.partner_name请参阅SQL Fiddle with Demo由于您不了解产品,因此您可能希望动态执行此操作。这可以使用预先准备的语句来完成。动态数据透视表(将行转换为列)您的代码如下所示:SET @sql = NULL;SELECT

GROUP_CONCAT(DISTINCT

CONCAT(

‘count(case when Product_Name = ”’,

Product_Name,

”’ then 1 end) AS ‘,

replace(Product_Name, ‘ ‘, ”)

)

) INTO @sqlfrom products;SET @sql = CONCAT(‘SELECT pt.partner_name, ‘, @sql, ‘ from partners pt

left join sales s

on pt.part_id = s.partner_id

left join products pd

on s.product_id = pd.prod_id

group by pt.partner_name’);PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;请参阅SQL Fiddle with Demo值得注意的GROUP_CONCAT是,默认情况下限制为1024字节。您可以通过在程序持续时间内将其设置得更高来解决此问题,即。SET @@group_concat_max_len = 32000;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/227651.html原文链接:https://javaforall.cn