你忽略了一些重要的信息(比如如何月份的存放處)你用什麼數據庫,但這裏的,你可以開始一個合乎邏輯的做法:
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