列を動的に作成することはできませんが、列を「偽造」して、UNION
日付範囲ごとに を使用できます。各 内で、他の日付列UNION
を選択し、正しい列を選択します。0
SUM()
これに似たものが機能するはずです:
SELECT
posts.affid,
affiliates.name,
sum(posts.stars) AS SEPT_2012,
0 AS AUG_2012,
0 AS JUL_2012
from
posts
JOIN affiliates on posts.affid = affiliates.id
WHERE
posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid
UNION (
SELECT
posts.affid,
affiliates.name
0 AS SEPT_2012,
sum(posts.stars) AS AUG_2012,
0 AS JUL_2012
from
posts
JOIN affiliates on posts.affid = affiliates.id
WHERE
posts.timestamp BETWEEN '2012-08-01' AND '2012-09-01'
group by affid
)
UNION (
SELECT
posts.affid,
affiliates.name
0 AS SEPT_2012,
0 AS AUG_2012,
sum(posts.stars) AS JUL_2012
from
posts
JOIN affiliates on posts.affid = affiliates.id
WHERE
posts.timestamp BETWEEN '2012-07-01' AND '2012-08-01'
group by affid
)
UPDATE (それぞれのすべての結果を 1affid
つの行に結合するため)
posts.affid
コメントごとに、単一の行のそれぞれの結果を各列のすべてのデータと組み合わせたいと考えています。上記の完全なクエリの周りに外部クエリを配置してから、GROUP BY affid
再度使用することでこれを実現できます。affid
これにより、要求に応じてすべての列ごとに 1 つの行が必要になります。上記のクエリを更新して、「より良い」出力0
の代わりに空の列ごとに選択するようにしました。null
SELECT affid, name, SEPT_2012, AUG_2012, JUL_2012 FROM (
... full query above ...
) AS q
GROUP BY affid
アップデート
すべてのサブクエリからすべての「星」の合計を取得するには、外側の select ステートメントを次のように使用します。
SELECT affid, name, sum(SEPT_2012), sum(AUG_2012), sum(JUL_2012) FROM (
... full query above ...
) AS q
GROUP BY affid