0

我想在 MySQL 中生成一个交叉表查询。我用过group_concat,但它不起作用。我发出以下查询来生成年份列表:

set @v1 = (SELECT GROUP_CONCAT(DISTINCT 
CONCAT('\\nsum(CASE WHEN myear=\"', myear ,'\" 
THEN amount ELSE NULL END) AS\"', myear,'\"')) AS column_list
FROM mdata
where myear > 1972 and myear < 1974);
select myear, amount, @v1 from mdata;

它生成了@v1包含二进制字段的年份列表。我想在下一个查询中使用它来进行交叉表查询。

我可以使用 PHP 运行第一个查询并将值存储在一个变量中并在下一个查询中使用它,但是如何在 MySQL 中完成呢?

4

1 回答 1

1

您必须从要执行的 SQL 中准备一条语句:

SET @v1 = (
  SELECT CONCAT('
    SELECT myear, amount, ',
           GROUP_CONCAT(DISTINCT CONCAT(
             'SUM(CASE WHEN myear=', QUOTE(myear), ' THEN amount END)
                AS `', REPLACE(myear, '`', '``'), '`'
           )), '
    FROM mdata'
  )
  FROM   mdata
  WHERE  myear > 1972 AND myear < 1974
);

PREPARE stmt FROM @v1;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2012-12-01T08:31:55.600 回答