[英]GROUP_CONCAT split in different columns MYSQL
我正在使用 TABLE,需要逻辑帮助此查询:
SELECT DATE_FORMAT(tran_date, '%M %Y') AS month_name,
SUM(IF(c.ctype = 4, gl.amount * -1, 0)) AS sales,
GROUP_CONCAT(DISTINCT(d.name)) AS d_name
FROM gl_trans AS gl, company_chart_masters AS a,
company_chart_types AS t, company_chart_classes AS c, dimensions as d
WHERE (c.ctype = 4 OR c.ctype = 5) AND
d.id = gl.dimension2_id AND
gl.account = a.account_code AND
a.account_type = t.id AND
t.class_id = c.id AND
DIMENSION2_id = gl.dimension2_id
GROUP BY month_name
ORDER BY month_name DESC
产生这个结果:
如您所见,查询的 output 有 3 个 coloum month_name sale和pos的 pos 列用逗号分隔但我现在想要将 pos 拆分为不同的列(因子 matab,Rawalpindi matab,...)。
我的第二个问题是,我还拆分了销售列,就像拆分pos列一样,并相应地显示销售,并且这个销售列在拆分后也显示在不同的列中。
有没有其他方法可以拆分结果并显示列和同一行中的每个值? 在同样的结果?
预期结果:
**Month_name**, **Factor_Matab**, **Rawalpindi_Matab**
feb 2020, 25000, 78236
mar 2020, 26366, 82367
由于我是堆栈溢出的新手,所以我不知道如何以表格形式显示此预期结果
为了获得您的期望,您应该使用pivot table
模式:
SELECT
month_name,
-- pivot table
SUM(IF(dimension = 'Factor_Matab', sales, 0)) AS Factor_Matab,
SUM(IF(dimension = 'Rawalpindi_Matab', sales, 0)) AS Rawalpindi_Matab
FROM (
-- Select data grouped by month and dimension as tmp
SELECT
DATE_FORMAT(tran_date, '%M %Y') AS month_name,
d.name AS dimension,
SUM(IF(c.ctype = 4, gl.amount * -1, 0)) AS sales
FROM
gl_trans AS gl,
company_chart_masters AS a,
company_chart_types AS t,
company_chart_classes AS c,
dimensions as d
WHERE (c.ctype = 4 OR c.ctype = 5) AND
d.id = gl.dimension2_id AND
gl.account = a.account_code AND
a.account_type = t.id AND
t.class_id = c.id AND
DIMENSION2_id = gl.dimension2_id
GROUP BY month_name, d.name
) tmp
-- group tmp table by month
GROUP BY month_name
ORDER BY month_name DESC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.