【发布时间】:2015-07-02 16:36:32
【问题描述】:
我有 3 张表(简化版):
-----------Orders--------------------
Id | Total_Price | Customer_Id | Date
--------Order Details---------------------
Id | Order_Id | Product Name | Qty | Value
----Customers------
Id | Name | Address
我用这个查询获取单个客户的总订单价值:
SELECT C.ID, C.NAME , SUM(O.TOTAL_PRICE)
FROM CUSTOMERS C
JOIN ORDERS O ON O.CUSTOMER_ID = C.ID
GROUP BY C.ID, C.NAME
现在,我想构建一个包含按日期范围过滤的总订单价值的报告:
SELECT C.ID, C.NAME , SUM(O.TOTAL_PRICE)
FROM CUSTOMERS C
JOIN ORDERS O ON O.CUSTOMER_ID = C.ID
WHERE O.DATE BETWEEN @value1 AND @value2
GROUP BY C.ID, C.NAME
这工作正常,但我想选择按客户分组的最近 3 年总订单价值的总和,这是我想要的结果:
1Year | 2Year | 3Year | Customer_Name
-------------------------------------------------
XXX | YYY | ZZZZ | Customer1
XYX | YYZ | ZZTZ | Customer2
....
我有这个基数: 包含 22.000 行的客户表 包含 87.000 行的订单表 600.000 的订单详情
可以不使用temptable、vartable或存储过程,执行时间长吗?
在我的报告中,我还想计算按产品客户分组的过去 3 年的总数量,但这是下一步。 有任何想法吗? 谢谢
【问题讨论】:
标签: sql sql-server tsql