将多个SQL命令重写为单个查询

时间:2015-06-26 02:44:08

标签: mysql sql

我试图转变这句话:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when year = ',
      year,
      ' then experience_rate end) AS `',
      year, '-Pen`'
    ) ORDER BY year
  ) INTO @sql
FROM
  spooner_pec;
SET @sql = CONCAT('SELECT policy_number, primary_name, ', @sql, ' 
                  FROM spooner_pec 
                   GROUP BY policy_number');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这样的事情:

SELECT policy_number, primary_name, (SELECT GROUP_CONCAT(DISTINCT CONCAT('max(case when year = ', year, ' then experience_rate end) AS `', year, '-Pen`') ORDER BY year))
FROM spooner_pec 
GROUP BY policy_number

但正如你可以通过小提琴看到的那样,我得到一些奇怪的输出作为列而不是实际的列,我在这里做错了什么?

SQLFiddle

1 个答案:

答案 0 :(得分:1)

我通常会进行正则表达式搜索,以便在单行中选择所有代码或选择单行代码。

使用find&取代

1. Under find section type "\n" --find all next line keywords
2. Under replace section type " " -- replace \n with one blank space
3. Tick "Use Regular Expression"

您的结果将是单行。

<强>之前

enter image description here

<强>后

enter image description here 替换为部分是一个空格

*注意:此方法适用于Windows平台和大多数编辑器。