2013-05-15 52 views
0

假設我有一個客戶餘額詳細信息表。例如:如何在SQL中的特定記錄之間插入記錄

CustID CustName CustDate Amt Bal 
1   DP  1/5/2013 1000 1000 
1   DP  5/5/2013 100 1100 
1   Dhara 10/5/2013 1000 1000 
1   DP  10/5/2013 1000 2100 

現在用戶插入一個記錄的CustName = DP,CustDate = 2013年7月5日,金額= 400則該記錄應該日期2013年5月5日之後和2013年10月5日之前加入各自的平衡也應該改變如下:

CustID CustName CustDate Amt Bal 
1   DP  1/5/2013 1000 1000 
1   DP  5/5/2013 100 1100 
1   DP  7/5/2013 400 1500 
1   Dhara 10/5/2013 1000 1000 
1   DP  10/5/2013 1000 2500 

我如何實現在數據庫中插入記錄時?我如何檢查日期在已插入記錄之間的時間?請幫忙

+1

SQL Server表沒有任何順序,真的 - 你只是在它的末尾加上行,當您需要讓行按照特定順序,您必須通過使用'ORDER BY'來請求.... –

+0

數據的位置可能是您最擔心的問題。這幾乎總是一個如何檢索它的問題。從表格中檢索數據時,您有許多排序選項。 –

+0

有沒有具體的例子? – DharaPPatel

回答

0

我想,如果您使用ORDER BY子句以所需順序訪問數據,您可以得到您想要的。有關索引的使用,請參閱您的數據庫文檔。

+0

可以計算餘額值。 – nabuchodonossor

0

這裏是如何做到這一點的一個建議:http://www.sqlfiddle.com/#!3/d341b/9

CREATE TABLE Customer 
(
    CustId INT, 
    CustName NVARCHAR(150), 
    CustDate DATE, 
    Amt INT, 
) 

INSERT INTO Customer 
    (CustID, CustName, CustDate, Amt) 
VALUES 
    (1, 'DP', '2013-01-05 00:00:00', 1000), 
    (1, 'DP', '2013-05-05 00:00:00', 100), 
    (1, 'DP', '2013-07-05 00:00:00', 400), 
    (1, 'Dhara', '2013-10-05 00:00:00', 1000), 
    (1, 'DP', '2013-10-05 00:00:00', 1000) 
; 

;WITH RankedCustomer AS 
(
    SELECT 
    CustId 
    , CustName 
    , CustDate 
    , Amt 
    , ROW_NUMBER() OVER(ORDER BY CustDate) Row 
    FROM 
    Customer 
) 
SELECT 
    Customer.CustId 
    , Customer.CustName 
    , Customer.CustDate 
    , Customer.Amt 
    , SUM(PreviousCustomer.Amt) 
FROM 
    RankedCustomer Customer 
    LEFT JOIN RankedCustomer PreviousCustomer 
    ON PreviousCustomer.CustId = Customer.CustId 
    AND PreviousCustomer.CustName = Customer.CustName 
    AND PreviousCustomer.Row <= Customer.Row 
GROUP BY 
    Customer.CustId 
    , Customer.CustName 
    , Customer.CustDate 
    , Customer.Amt 
ORDER BY 
    Customer.CustDate