Первую запись нужно назначить второй записи, если в SQL Server это no_id - PullRequest
0 голосов
/ 13 декабря 2018
CREATE TABLE HIST   
(
    ACCT_ID INT,
    ACCT_SEQ INT,
    HISTORY_SEQ INT,
    ACCT_STATUS CHAR(1),
    ASSIGNED_DATE DATETIME,
    EXPIRED_DATE DATETIME,
    ID VARCHAR(50)  
)

INSERT INTO HIST VALUES 
(101,   1,  1,'A','1/12/2015 15:40','1/13/2015 8:00','NO_ID'),
(101,   1,  2,'A','1/13/2015 8:00','3/3/2017 19:43','9596025'),
(101,   1,  3,'A','3/3/2017 19:43',NULL,'9596025')

SELECT * FROM HIST 

Но если в качестве идентификатора указано «NO_ID», нам нужно обновить дату, назначенную для следующей строки, датой, назначенной для первой записи.

Пожалуйста, найдите изображение и совет для запроса SQL Server

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018
create procedure SP_Hist
as
begin

DECLARE @I INT=(SELECT Count(*) FROM HIST where Id='NO_ID' );
START:                -- DO
If @I>0
begin
update HIST set ASSIGNED_DATE=(select top 1 ASSIGNED_DATE from HIST where id='NO_ID') where Id=(select top 1 Id from HIST where id !='NO_ID') and HISTORY_SEQ=2

delete HIST where Id='No_ID' and ACCT_ID=(select top 1 ACCT_ID from HIST where id='NO_ID')
end

  SET @I=(SELECT Count(*) FROM HIST where Id='NO_ID');

IF @I!=0 GOTO START; 

end

exec SP_Hist
0 голосов
/ 13 декабря 2018

Поиск ниже поможет вам.

CREATE TABLE #HIST   
(
    ACCT_ID INT,
    ACCT_SEQ INT,
    HISTORY_SEQ INT,
    ACCT_STATUS CHAR(1),
    ASSIGNED_DATE DATETIME,
    EXPIRED_DATE DATETIME,
    ID VARCHAR(50)  
)

INSERT INTO #HIST VALUES 

(101,   1,  1,'A','1/12/2015 15:40','1/13/2015 8:00','NO_ID'),
(101,   1,  2,'A','1/13/2015 8:00','3/3/2017 19:43','9596025'),
(101,   1,  3,'A','3/3/2017 19:43',NULL,'9596025'),
(102,   1,  4,'A','1/18/2015 15:40','1/13/2015 8:00','NO_ID'),
(102,   1,  5,'A','1/15/2015 8:00','3/3/2017 19:43','9596025'),
(102,   1,  6,'A','3/3/2017 19:43',NULL,'9596025')


SELECT * 
        ,ROW_NUMBER()OVER(Partition by ACCT_ID order by HISTORY_SEQ asc) as RID
INTO #ResultID
FROM #HIST  

UPDATE H
SET H.ASSIGNED_DATE=R.ASSIGNED_DATE
FROM #ResultID R
INNER JOIN #ResultID R1 ON R.ACCT_ID=R1.ACCT_ID   and R.RID= R1.RID-1
INNER JOIN #HIST H ON H.ACCT_ID=R1.ACCT_ID AND H.HISTORY_SEQ=R1.HISTORY_SEQ
WHERE R.ID='NO_ID'

select * from #HIST where ID<>'NO_ID'

drop table #HIST   
drop table #ResultID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...