【发布时间】:2018-06-06 11:51:24
【问题描述】:
我在下面有这个查询:
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
感谢我问了很多问题,但我希望有人可以帮助我完成一个可以完成上述所有操作的查询。
提前谢谢你:)
【问题讨论】:
-
我会建议我总是用这样的东西做同样的事情,在你的表现层中做。尝试在您的 RDBMS 中使用 SQL 执行此类操作将需要动态 SQL,而且实现起来要困难得多。
-
我很乐意,但我需要将此查询自动化到 ssrs Visual Studio 中,然后很难做到这一点
-
有很多关于使用动态 SQL 创建 PIVOT 查询的示例
-
如果是 SSRS,请使用矩阵而不是 tablix。容易得多。
-
@Larnu 我将如何处理我上面的第一个表?
标签: sql-server average transpose