[英]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.