0
CREATE TABLE #im  ( SId int,  Reporting_Year_Id int );
GO        
INSERT #im (SId, Reporting_Year_Id) VALUES (1,2011)
INSERT #im (SId, Reporting_Year_Id) VALUES (2,2011)
INSERT #im (SId, Reporting_Year_Id) VALUES (3,2011)
GO

CREATE TABLE #im1 ( SID int,  PID int, Release int, Legal int, Seq int);
GO
INSERT #im1 (SID, PID, Release, Legal, Seq) VALUES (1,10005,1,18,1) --Trans_Type should be 'A'
INSERT #im1 (SID, PID, Release, Legal, Seq) VALUES (1,10005,1,10,1) --Trans_Type should be 'C'
INSERT #im1 (SID, PID, Release, Legal, Seq) VALUES (2,10005,1,18,1) --Trans_Type should be ' '
INSERT #im1 (SID, PID, Release, Legal, Seq) VALUES (3,10006,1,20,1) --Trans_Type should be 'A'

GO

declare @iCurrentFileId int
set @iCurrentFileId = 2; 

WITH current_file as
(
      select * from #im1 where SID = @iCurrentFileId
)    
, previous_file as
(
      select * from #im1 where SID = @iCurrentFileId -1 
)
select c.SID, c.PID,c.Legal,c.Release,c.Seq,p.SID,
    case when p.SID IS  null then 'A' 
         else 'C' end as 'transaction_type'
from current_file c left outer join previous_file p on p.PID = c.PID and c.Seq = p.Seq

transaction_Type を次のように設定する必要があります。

SID を除くすべてのレコードが前の SID に存在しない場合は「A」

SID を除くすべてのレコードが以前の SID と異なる場合は「C」

' ' SID を除くすべてのレコードが同じ場合

どうやってするか?どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

1 つの方法は、ビジネス ルールに基づいて一時テーブルを更新し、結果を返すことです。たとえば、これはトランザクション タイプ A を満たします。

declare @im table(previousID int, previousSID int, recentID int, recentSID int, transaction_type varchar(50))

insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (1,2,7,9,'')
insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (2,2,8,2,'')
insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (3,3,9,3,'')
insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (4,3,10,3,'')
insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (5,4,11,4,'')
insert into @im(previousID, previousSID, recentID, recentSID, transaction_type) values (6,4,12,4,'')


/* 'A' if all records in the most recent SID doesn't exist in the previous SID */
update im
set transaction_type = 'A - 9 is not one of the previous SIDs'
from @im im
where im.recentSID not in (
    select distinct previousSID from @im
)

/* add additional updates based on your business rules... */

/* finally return the results */

select * from @im
于 2013-09-06T18:03:39.113 に答える