Я надеюсь, что это относительно простой вопрос для ответа. У меня есть список транзакций в таблице базы данных, и я хочу извлечь в столбцы значение enum (y/n) для каждого производителя мотоциклов, который существует в этой таблице.Mysql строки для столбцов запрос
Я попытался следующий запрос:
SELECT
accCode,
rnFuncBool(accCode,'HON') purchasedHonda,
rnFuncBool(accCode,'YAM') purchasedYamaha,
rnFuncBool(accCode,'KAW') purchasedKawsaki,
rnFuncBool(accCode,'SUZ') purchasedSuzuki,
rnFuncBool(accCode,'DUC') purchasedDucati,
rnFuncBool(accCode,'KTM') purchasedKTM,
rnFuncBool(accCode,'SYM') purchasedSym,
rnFuncBool(accCode,'VIC') purchasedVictory
FROM _emarsys_vehiclessold WHERE accCode<>'' GROUP BY accCode
и функция rnFuncBool выглядит следующим образом:
DELIMITER $$
USE `phcontacts`$$
DROP FUNCTION IF EXISTS `rnFuncBool`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `rnFuncBool`(
fnAccCode VARCHAR(6),
fnAccMan VARCHAR(3)
) RETURNS VARCHAR(1) CHARSET utf8
BEGIN
IF (SELECT COUNT(*) FROM _emarsys_vehiclessold WHERE accCode=fnAccCode COLLATE utf8_unicode_ci AND vehichleManufacturer=fnAccMan COLLATE utf8_unicode_ci)>0 THEN
RETURN 'y';
ELSE
RETURN 'n';
END IF;
END$$
DELIMITER ;
Хотя это кажется очень логичным решением для быстрого возврата основной таблицы содержит более 48000 строк, и поэтому время выполнения находится в минутах.
Я попытался работать со сбором на временной таблице, но только один из них вернулся только сгруппированным по коду учетной записи клиента.
Конечно, я мог бы попробовать group_concat, но это не то, чего я действительно хочу достичь.
Если у кого-то есть мысли о том, как я могу достичь этого, это было бы блестящим.
Как всегда большое спасибо заранее.
Приветствие Graham
Это FAQ, поиск «mysql pivot», и вы найдете много вопросов и ответов. – Barmar
Данные примера плюс образец желаемого результата могут значительно увеличить ваши шансы получить ответ. Я лично не буду расшифровывать ваши запросы. – akostadinov