2013-08-26 1 views
0

У меня есть следующий проект базы данных:как извлечь активную запись, передавая идентификатор сервера Sql

Table Content 
ID  Status  ReplacedId 

1 C  NULL 
2 C  1 
3 C  2 
4 A  3 
5 A  NULL 
6 A  NULL 
7 A  NULL 

логика здесь следующим образом

Id «1» Отменено и вместо этого ID «2» создается так, что запись 2 имеет ссылку на идентификатор «1» в столбце «ReplacedId». , так как iD 2 отменяется и создается «3», «3» отменяется и «4» создается. отмененный статус записи является «C» и активные записи состояния является «A»

Моего Требованием:

я должен показать активную запись для Id пропускания Id (1), если это является отменена запись, если такова же запись, если это активная запись.

+0

Вы говорите, что если вы пройдете в 1,2,3 ID, вы получите результат 4. Если вы пройдете 4,5,6,7, вы получите тот же результат. –

ответ

0
DECLARE @Table TABLE(
     RecordID INT, 
     Status VARCHAR(20), 
     ParentID INT 
) 

INSERT INTO @Table SELECT  1,'C',NULL 
INSERT INTO @Table SELECT  2,'C',1 
INSERT INTO @Table SELECT  3,'C',2 
INSERT INTO @Table SELECT  4,'A',3 
INSERT INTO @Table SELECT  5,'A',NULL 
INSERT INTO @Table SELECT  6,'A',NULL 

DECLARE @RecordID INT 

SELECT @RecordID = 1 

;WITH Selects AS (
     SELECT * 
     FROM @Table 
     WHERE RecordID = @RecordID 
     UNION ALL 
     SELECT t.* 
     FROM @Table t INNER JOIN 
       Selects s ON t.ParentID = s.RecordID 
) 
SELECT * 
FROm Selects where Status = 'A' 
Смежные вопросы