如何以某种方式在select中做一个循环?

esa*_*kwn -1 mysql sql pivot

我有这张桌子.

+------+-------+--------+
| CODE | MONTH | AMOUNT |
+------+-------+--------+
|    2 |     1 |    100 |
|    3 |     1 |    200 |
|    2 |     2 |    300 |
|    3 |     2 |    400 |
+------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

而且,这是我想要的结果.

+------+---------+---------+
| CODE |     MO1 |     MO2 |
+------+---------+---------+
|    2 |     100 |     300 |
|    3 |     200 |     400 |
+------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

我知道在select中循环是不可能的.
我想我也许可以使用,CASE但我没有明确的数月,就像我上面的例子,其中只有1月和2月的数据.我将在3月份获得数据.我怎样才能做到这一点?

him*_*056 5

既然你不知道几个月的确定数量,你可以动态地这样做:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(case when Month = ''',
      Month,
      ''' then Amount else 0 end) AS `Mo',
      Month, '`'
    )
  ) INTO @sql
FROM Table2;


SET @sql = CONCAT('SELECT Code, ', @sql, '
                  FROM Table2 
                  GROUP BY Code');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)

结果:

| CODE | MO1 | MO2 |
--------------------
|    2 | 100 | 300 |
|    3 | 200 | 400 |
Run Code Online (Sandbox Code Playgroud)

看到这个SQLFiddle