平均,总计和转置

时间:2018-06-06 11:51:25

标签: sql-server average transpose

我在下面有这个查询:

SELECT distinct COUNT(Status) AS [Transactions], sender AS [Supplier],
left(DATENAME(mm, Date_Reported), 3) AS Month, DATENAME(yyyy, Date_Reported) AS Year
 FROM TX
 and Date_Reported >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
GROUP BY DATENAME(mm, Date_Reported), DATENAME(yyyy, Date_Reported), sender
ORDER BY sender, Year, Month DESC;

它给了我一张如下表:

TX | Supplier | Month | Year

现在,上面的X行可以包含相同的供应商,并且可以使用与之相关的值,如下所示:

**TX | Supplier | Month | Year**
1  | A        | Oct   | 2017
5  | A        | Jan   | 2017
3  | A        | Mar   | 2018
2  | A        | Sep   | 2017

所有供应商都是这种情况,因此我需要在一个简洁的表格中找到不同的供应商及其价值,而不是一个包含很多行的长卷表:

Supplier | May 17 | Jun 17 | Jul 17 ... | May 18 | 

我还想添加两个额外的列:过去13个月的平均值(即5月17日 - 5月18日)以及过去13个月的总数,所以决赛桌应如下所示:

Supplier | May 17 | Jun 17 | Jul 17 ... | May 18 | Average | Total

我很感激我问了很多,但我希望有人可以帮助我解决上述所有问题的单一查询。

我提前感谢你:)。

1 个答案:

答案 0 :(得分:0)

你必须做这样的事情:

SELECT sender AS [Supplier],
   SUM(CASE WHEN MONTH(Date_Reported) = 5 AND YEAR(Date_Reported) = 2017  THEN 1 ELSE 0 END) AS [May 17],
   SUM(CASE WHEN MONTH(Date_Reported) = 6 AND YEAR(Date_Reported) = 2017  THEN 1 ELSE 0 END) AS [Jun 17]
GROUP BY sender
ORDER BY sender