
不幸的是,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演示
由于您不了解产品,因此您可能希望动态执行此 *** 作。这可以使用准备好的语句来完成。
使用动态数据透视表(将行转换为列),您的代码将如下所示:
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 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');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;请参阅SQL演示
可能值得注意的
GROUP_CONCAT是,默认情况下限制为1024个字节。您可以通过在整个过程中将其设置得更高一些来解决此问题。
SET@@group_concat_max_len = 32000;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)