2013-03-19 2 views
1

에 따라 값 ...증가 나는 다음과 같은 문제가 조건

나는 현재 회계 ID하는 기본 키를 가진 테이블 AccountingEntry 있습니다. 나는 또한이 항목의 유형을 알려줍니다 열을 ...

행이 특정 유형의 경우 내가해야 할 것은 다음과 같은 ...

입니다

이 ( CreditCardPayment을 말할 수있을 I 다른 열의 값을 증가시킬 필요가있다, 나는이 ?? 수행 할 수 있습니다 ... 어떻게 하나 CCId을 말할 수

(그냥 머리 위로, 더 테이블 분리 할 수 ​​없습니다)

이 수행해야 INSERT 문에서 ...

내 데이터베이스에 내가 말하길 ...

ID | 유형 | 다른 ID
1 | DEBIT | -
2 | 신용 | 1
3 | DEBIT | -
4 | 신용 | - x는 여기서 일해야 + 1

+0

행을 업데이트하고, 조건을 충족시키는 값을 새 값으로 설정합니다. SQL로 변환하는 것이 그리 어렵지 않습니다. 조금 익숙하다면 ..? –

+0

필자는 다른 INSERT에서이를 수행해야합니다 ... 다른 SQL에없는 경우 ... –

+0

INSERT가 새 레코드를 작성하고 아무 것도 수정하지 않습니다 (증가) –

답변

4

간단한 UPDATEWHERE 조건>이 마지막 신용을 할 필요가 'AnotherID'

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 

,321 0은 다음과 같을 수 있습니다.

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

INSERT에서이 작업을 수행해야합니다 ... 설명에 추가하는 것을 잊었습니다 ... –

+2

다음 현재 INSERT 문을 게시하십시오! – Rachcha

+0

내 대답 업데이트 ... 질문을하기 전에 두 번 질문을 확실히 읽어야합니다. – MarcinJuraszek

0

한 번 인스턴스를 실행하려는 경우 Row_Number() 함수를 사용할 수 있습니다.

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

그러면 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 
관련 문제