这是一个SQL查询,我很快写了一个关于每个月PayPal购买数量的报告,数据库是基于已导入数据的我自己的构建。根据月份重复JOIN
SELECT
Items.ItemTitle,
February.Cnt As February,
March.Cnt As March,
April.Cnt As April,
May.Cnt As May,
June.Cnt As June,
July.Cnt As July,
August.Cnt As August,
September.Cnt As September
FROM
(SELECT DISTINCT ItemTitle FROM PayPalHistory) As Items
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-02-01' AND DateTimeUtc < '2014-03-01' AND Net > 0.00
GROUP BY ItemTitle) AS February
ON Items.ItemTitle = February.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-03-01' AND DateTimeUtc < '2014-04-01' AND Net > 0.00
GROUP BY ItemTitle) AS March
ON Items.ItemTitle = March.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-04-01' AND DateTimeUtc < '2014-05-01' AND Net > 0.00
GROUP BY ItemTitle) AS April
ON Items.ItemTitle = April.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-05-01' AND DateTimeUtc < '2014-06-01' AND Net > 0.00
GROUP BY ItemTitle) AS May
ON Items.ItemTitle = May.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-06-01' AND DateTimeUtc < '2014-07-01' AND Net > 0.00
GROUP BY ItemTitle) AS June
ON Items.ItemTitle = June.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-07-01' AND DateTimeUtc < '2014-08-01' AND Net > 0.00
GROUP BY ItemTitle) AS July
ON Items.ItemTitle = July.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-08-01' AND DateTimeUtc < '2014-09-01' AND Net > 0.00
GROUP BY ItemTitle) AS August
ON Items.ItemTitle = August.ItemTitle
LEFT OUTER JOIN
(SELECT ItemTitle, COUNT(*) As Cnt FROM PayPalHistory WHERE
DateTimeUtc >= '2014-09-01' AND DateTimeUtc < '2014-10-01' AND Net > 0.00
GROUP BY ItemTitle) AS September
ON Items.ItemTitle = September.ItemTitle
ORDER BY
ItemTitle ASC
你在这里看到一个模式? :)
有什么办法我可以有一个循环或一些其他的构造,以消除重复LEFT OUTER JOIN (SELECT ...)
代码?
谢谢!
我认为你需要一个'PIVOT'。首先使用ItemTitle,Month,Count进行表格查询。之后,尝试“枢轴”或使用类似的技术。像[this](http://sqlhints.com/2014/03/10/pivot-and-unpivot-in-sql-server/)。 – 2014-10-02 20:58:40