我想在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中完成它?
答案 0 :(得分:1)
您必须prepare要执行的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;