你忽略了一些重要的信息(比如如何月份的存放处)你用什么数据库,但这里的,你可以开始一个合乎逻辑的做法:
CREATE VIEW CustomerBilledInMonth (CustName, Month, AmountBilled, ContinuousFlag) AS
SELECT CustName, Month, SUM(AmountBilled), 'Noncontinuous'
FROM BillingTable BT1
WHERE NOT EXISTS
(SELECT * FROM BillingTable BT2 WHERE BT2.CustName = BT1.CustName AND BT2.Month = BT1.Month - 1)
GROUP BY CustName, Month
UNION
SELECT CustName, Month, SUM(AmountBilled), 'Continuous'
FROM BillingTable BT1
WHERE EXISTS
(SELECT * FROM BillingTable BT2 WHERE BT2.CustName = BT1.CustName AND BT2.Month = BT1.Month - 1)
GROUP BY CustName, Month
假设月份这里是一个连续的整数字段从系统中第一个可能的月份开始递增1,这会为您提供每个客户对每个月累计的结算额度,以及一个额外的标志,其中包含对客户同时进行结算的月份的“连续”那些在客户没有收到账单的月份之后的月份中,“不连续”。
然后:
SELECT CustName, LISTOF(Month), SUM(AmountBilled), MAX(ContinuousFlag)
FROM CustomerBilledInMonth GROUP BY CustName
会给你或多或少你想要什么(其中LISTOF是某种类型的COALESCE函数依赖你使用的确切数据库)。
从你的描述,而不是并发,你可能意味着连续?即不是“同时”,而是“在接下来的几个月”? – 2009-10-15 20:32:05
你的RDBMS是什么? – cmsjr 2009-10-15 20:35:50
另外,月份如何储存,数字或名称? – cmsjr 2009-10-15 20:38:28