2013-03-19 112 views
1

我有以下問題的值...增量取決於條件

我有一個表AccountingEntry目前有一個主鍵,這是會計ID。我也有一欄,告訴我這是哪種類型的入口......

我需要做的是以下...

如果該行是某種類型的(可以說CreditCardPayment,我需要增加另一列的值,可以說由一個CCId ......我怎樣才能做到這一點??

(剛擡起頭,不表分離可以做到)

這需要做在INSERT語句中....

可以說我的數據庫中有我..

ID | TYPE |另一個ID
1 | DEBIT | -
2 | CREDIT | 1
3 | DEBIT | -
4 | CREDIT | X - >這必須是最後的信用 'AnotherID' + 1

+0

你想更新一行,設置一個值到一個新的,滿足條件。轉換爲SQL並不是很難,如果你甚至有點熟悉它..? – 2013-03-19 13:08:39

+0

我需要在我的INSERT中做...不是在不同的SQL ... – 2013-03-19 13:10:38

+0

INSERT創建一條新記錄,它不會修改(增加)任何東西 – 2013-03-19 13:11:09

回答

4

簡單UPDATEWHERE條件應該在這裏做的工作:

UPDATE TableName SET CCId = CCId + 1 WHERE Type = 'CreditCardPayment' 

更新

您可以後自動執行INSERT語句中使用觸發器:

CREATE TRIGGER autoIncrement 
ON TableName 
AFTER INSERT 
AS 
    UPDATE 
     TableName 
    SET 
     CCId = -- put your 'get last of that type + 1 here 
    WHERE 
     Type = 'CreditCardPayment' AND Id = inserted.Id 
GO 

-- put your 'get last of that type + 1 here可以是這樣的:

SELECT TOP(1) AnotherID FROM TableName WHERE Type = 'CreditCardPayment' ORDER BY AnotherID DESC 
+0

我需要在INSERT中執行此操作...忘記將其添加到描述中... – 2013-03-19 13:08:04

+2

然後發佈您當前的INSERT語句! – Rachcha 2013-03-19 13:08:42

+0

更新了我的答案...您應該在詢問 – MarcinJuraszek 2013-03-19 13:18:35

0

如果您要運行一次性實例,可以使用Row_Number()函數。

select rowtype, accountingid, ROW_NUMBER() over(partition by rowtype order by rowtype, accountingid) 

這會給你一個唯一的行號,每個行類型由會計編號排序。然後,如果您在數據庫中需要此信息,則可以使用select運行更新或將所選行放入臨時表中並以此方式進行更新。

0

這是由此產生的觸發器...適合我需要的作品。在運行一個腳本來改變我的數據庫中的數據之後,每次插入記錄時,如果它是我需要的類型,它將自動增加InvoiceNumber字段。

CREATE TRIGGER IncrementInvoiceNumber 
     ON AccountingEntry 
     AFTER INSERT 
    AS 
    BEGIN 
     DECLARE @insertedId INT; 
     SELECT TOP(1) @insertedId = IdAccountingEntry FROM AccountingEntry ORDER BY IdAccountingEntry DESC; 
     UPDATE AccountingEntry SET InvoiceNumber = (SELECT TOP(1) InvoiceNumber FROM AccountingEntry 
                WHERE AccountEntryType = 'I' 
                ORDER BY InvoiceNumber DESC  
                ) + 1 
           WHERE IdAccountingEntry = @insertedId; 

    END