GROUP_CONCAT разделен на разные столбцы MYSQL - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю с ТАБЛИЦЕЙ, нужна логическая помощь. Этот запрос:

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

Создает этот результат:

query result

Как вы можете видеть выходные данные в запросе есть 3 столбца имя_месяца продажа и pos столбец pos разделены запятой. Теперь мне нужно разделить pos на разные столбцы (фактор matab, Rawalpindi matab, ...).

Моя вторая проблема заключается в том, что я также разделяю столбец продажа как разделение столбца pos и показывает продажу соответственно pos мудро, и этот столбец продажи также отображается в разных столбцах после разделения.

Есть ли другой способ разделить RESULT и показать каждое значение в столбце и той же строке? В том же результате?

Ожидаемый результат:

**Month_name**,          **Factor_Matab**,          **Rawalpindi_Matab** 
feb 2020,                  25000,                     78236
mar 2020,                  26366,                     82367

Поскольку я новичок в переполнении стека, я не знаю, как отобразить этот ожидаемый результат в табличной форме

1 Ответ

0 голосов
/ 21 апреля 2020

Чтобы получить ваши ожидания, вы должны использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...