我有這樣的表:MySQL或PHP變換行列
月份是動態生成基於用戶輸入。這個月也可以重複。但是,我想將月份值轉換爲數值的列,但是在mysql中動態地嘗試它時,它不允許我使用,因爲它只能返回不同的值。
我也嘗試刪除不同於我的代碼,但它不工作。有什麼想法嗎?
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
SET group_concat_max_len=2048;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(month = ''',
month,
''', amount, NULL)) AS ',
month
)
) INTO @sql
FROM tmp_results;
SET @sql = CONCAT('SELECT r.account,
r.region, ',
@sql, '
FROM tmp_results r
LEFT JOIN accounts AS a
on r.account_id = a.id
GROUP BY r.account');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
試圖在laravel 5中使用集合,但仍然沒有做任何事情,如果你有PHP的答案,我也歡迎它。我爲了解決這個問題需要數天的時間。
「不起作用」不是很具體:什麼不起作用,或者你得到什麼錯誤?根據您的服務器配置(例如5.7默認配置),您可能必須在'select'中將'r.region'更改爲'max(r.region)as region'或使用'GROUP BY r.account,r。區域「,但除此之外,第一眼看起來,代碼看起來是正確的(除了不檢查」tmp_results「或者」@ sql「是否爲空,在這種情況下會導致錯誤,但似乎不是這裏的問題;如果你有'month'的無效值,例如'''',或者包含空格,'-',...),它將不起作用。 – Solarflare
不起作用的意思,它沒有返回我想要的結果。它省略了我需要顯示的其他幾個月。 – Dhenn
它正在工作,只是沒有返回我期望的結果 – Dhenn