根据条件增加值

时间:2013-03-19 13:04:56

标签: sql sql-server database

我有以下问题...

我有一个表AccountingEntry,它目前有一个主键,即会计ID。我还有一个专栏,告诉我它是哪种类型的入口......

我需要做的是以下......

如果行是某种类型(比如说CreditCardPayment),我需要增加另一列的值,让我们说CCId一个......我怎样才能实现这个? / p>

(只是抬头,不能分隔表格)

这需要在INSERT语句中完成....

让我们在我的数据库中说我有......

ID | TYPE |另一个身份证 1 | DEBIT | -
2 |信用| 1
3 | DEBIT | -
4 |信用| x - >这需要是最后一个信用'AnotherID'+ 1

3 个答案:

答案 0 :(得分:4)

具有UPDATE条件的简单WHERE应该在这里完成工作:

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

更新

您可以在INSERT语句后使用trigger:

自动执行此操作
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

答案 1 :(得分:0)

如果您要运行一次性实例,可以使用Row_Number()函数。

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

这将为accountingid订购的每种行类型提供唯一的行号。然后,如果您需要在数据库中使用此信息,则可以使用select运行更新,或者将所选行放在临时表中并以此方式更新。

答案 2 :(得分: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