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 に答える