我最近遇到了下面的主题,它在为MySQL构建动态SQL时非常有用。
MySQL pivot row into dynamic number of columns
话虽如此,我确实很难尝试调试语句。现在为了这篇文章的真正目的!要进行调试,我会在包含语句的变量上运行Select(选择@SQL)。然后从查看器窗口复制该结果并让查询分析器对其进行检查。一旦我这样做,开发真的加快了。我相信所有高级开发人员都知道这一点,但对于任何新手,我希望这有帮助!
我的动态语句看起来像是一个参考。
SET @sql = NULL;
SET @@group_concat_max_len = 50000;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
' sum(
case when symbol = ''',
symbol,
''' then pctttlassets end) AS ',
CONCAT(UPPER(ACode),'_',REPLACE(Symbol, '+', ''))
)
) INTO @sql
from trade_detail this;
SET @sql = CONCAT('SELECT Distinct(main.port_code) as PortCode, ', @sql, '
FROM trade_detail main GROUP BY main.Port_Code');
SELECT @SQL;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;