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

发布时间:2025-12-09 13:43:51 浏览次数:4

杨魅力

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

count(casewhenpd.product_name=‘ProductA’THEN1END)ProductA,

count(casewhenpd.product_name=‘ProductB’THEN1END)ProductB,

count(casewhenpd.product_name=‘ProductC’THEN1END)ProductC,

count(casewhenpd.product_name=‘ProductD’THEN1END)ProductD,

count(casewhenpd.product_name=‘ProductE’THEN1END)ProductEfrompartnersptleftjoinsaless

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

GROUP_CONCAT(DISTINCT

CONCAT(

‘count(casewhenProduct_Name=”’,

Product_Name,

”’then1end)AS‘,

replace(Product_Name,‘‘,”)

)

)INTO@sqlfromproducts;SET@sql=CONCAT(‘SELECTpt.partner_name,‘,@sql,‘frompartnerspt

leftjoinsaless

onpt.part_id=s.partner_id

leftjoinproductspd

ons.product_id=pd.prod_id

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

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477