【发布时间】:2015-09-25 19:39:30
【问题描述】:
我已经搜索了所有答案数据库,但老实说还没有找到我需要的东西。我有一个包含合同价值的表格以及与每个价值相关的日期。我的查询应该总结过去 6 个月累积的合同价值,从当前日期开始并回顾 3 个月,始终考虑 6 个月的累积期:
SELECT
SUM((ContractDate > DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 0 MONTH), INTERVAL 6 MONTH) AND (ContractCancelled <>1)) * ContractValue) AS Today,
SUM((ContractDate > DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), INTERVAL 6 MONTH) AND (ContractDate <= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND (ContractCancelled <>1)) * ContractValue) AS OneMonthAgo,
SUM((ContractDate > DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), INTERVAL 6 MONTH) AND (ContractDate <= DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) AND (ContractCancelled <>1)) * ContractValue) AS TwoMonthsAgo,
SUM((ContractDate > DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), INTERVAL 6 MONTH) AND (ContractDate <= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) AND (ContractCancelled <>1)) * ContractValue) AS ThreeMonthsAgo
FROM Contracts
查询工作正常,但我在一行中得到结果,每个累积值在不同的列中:
+----+---------+-------------+--------------+----------------+
| | Today | OneMonthAgo | TwoMonthsAgo | ThreeMonthsAgo |
+--------------+-------------+--------------+----------------+
| 1 | 3434005 | 3992877 | 4104565 | 3688412 |
+--------------+-------------+--------------+----------------+
我需要将这个查询变成一个图表,并且要做到这一点,而不是列,累积的结果应该显示为行,或者像这样:
+---------------+--------------------------------------+
| LookingTo | AcumulatedContractValue (6 months) |
+---------------+--------------------------------------+
| Today | 3434005 |
+---------------+--------------------------------------+
| OneMonthAgo | 3992877 |
+---------------+--------------------------------------+
| TwoMonthsAgo | 4104565 |
+---------------+--------------------------------------+
|ThreeMonthsAgo | 3688412 |
+---------------+--------------------------------------+
如果它是在 MS SQL 中,我相信 PIVOT 应该可以工作,但我不知道如何在 MySQL 中做到这一点。你能帮我解决这个问题吗?
【问题讨论】: