我试图从我的表中获得过去12个月内花费超过1000美元的客户的所有发票。下面是我的表格,仅针对两个客户作为示例:

我的问题是:
SELECT
t.Customer, t.Invoice
FROM
(SELECT
CI.Customer, CI.Invoice, CI.Date,
SUM(CASE
WHEN CI.Date > DATEADD(month, -12, getdate())
THEN CI.Valuee
ELSE 0
END) as Net
FROM
CustomerInvoice CI
GROUP BY
CI.Customer, CISRV.Invoice, CISRV.Date) AS t
GROUP BY
t.Customer, t.Invoice
HAVING
SUM (t.Net) > 1000因此,我将只得到发票INV-341453,但我想也显示发票INV-346218和INV-349065。
我做错了什么?
发布于 2017-01-16 08:10:40
使用ANSI标准窗口函数:
select ci.*
from (select ci.*,
sum(ci.value) over (partition by ci.customer) as total_value
from CustomerInvoice CI
where CI.Date > DATEADD(month, -12, getdate())
) ci
where total_value > 1000;我想您所说的“所有发票”是指过去12个月内的发票。
发布于 2017-01-16 08:11:37
为此,您可以使用分组查询来识别超过1000阈值的客户,然后显示这些客户的所有发票:
SELECT Customer, Invoice
FROM CustomerInvoice
WHERE Customer IN
(SELECT Customer
FROM CustomerInvoice
GROUP BY Customer
HAVING SUM(CASE WHEN CI.Date>DATEADD(month,-12,getdate()) THEN CI.Valuee ELSE 0 END) > 1000)https://stackoverflow.com/questions/41667655
复制相似问题