Я хочу преобразовать данные месяца в столбцы
This Query Получение следующего результата
SELECT CONCAT(MONTHNAME(C.'ClientServiceDate'),'-',YEAR(C.'ClientServiceDate')) AS 'Month',ME.'MethodName',
COUNT(C.'ContraceptiveMethod') AS 'TotalUser',
MONTH(C.ClientServiceDate) AS 'Month'
FROM mwra AS M
JOIN client_information AS C ON (C.MwraId = M.MwraId)
LEFT JOIN methods AS ME ON (ME.MethodId = C.ContraceptiveMethod)
WHERE C.FpUserStatus = 'New'
GROUP BY ME.MethodId,MONTH(C.ClientServiceDate)
Я сделал нечто подобное некоторое время назад.
Вы можете попробовать с подготовленным выражением. Получить названия месяцев
SET @headers = (
SELECT
GROUP_CONCAT( DISTINCT
CONCAT(
'SUM( IF(MONTH(C.'ClientServiceDate') = ',
MONTHNAME(C.'ClientServiceDate'),
'C.ContraceptiveMethod,0) ) AS '
, MONTHNAME(C.'ClientServiceDate')
)
ORDER BY C.'ClientServiceDate'
)
FROM client_information as C
);
А затем используйте эти заголовки для подготовленного утверждения:
SET @sql = CONCAT('SELECT ', @headers, 'REMAINING QUERY');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;