2017-03-20 24 views
0

に基づいて、同じテーブルの列は、私は複合キーDOCID、verIdとテーブルのバージョンを持っている:SQL Server 2008の選択テーブルのすべてのカラム+カラム値

docId verId apprvDt  old_verId 
------ ------ ----------- ---------- 
A  3  03/20/2017 2 
A  2  03/18/2017 1 
A  1  03/16/2017 null 
B  1  03/18/2017 null 
C  2  03/20/2017 1 
C  1  03/16/2017 null 

は私がDOCID = Aを選択すると言います、 verId = 3の場合、クエリはold_verIdのapprvDtを取得するため、

docId verId apprvDt  old_verId old_apprvDt 
------ ------ ----------- ---------- ------------ 
A  3  03/20/2017 2   03/18/2017 

を返します。

私はこの

select a.docId, a.verId, a.apprvDt, a.old_verId, b.old_apprvDt 
from VERSION as a left join 
    (select x.docId, x.verId, x.apprvDt as old_apprvDt from REVISN as x 
    where x.docId = 'A' and x.verId = a.old_verId) as b 
on b.docId = a.docId and b.verId = a.old_verId 

ようにしようとしたが、私はマルチパート結合エラーを取得しています。

old_verId

のapprvDt(old_apprvDt)を含め、私はVERSIONから行を選択したい

答えて

0

下記の通りあなたの問題を解決するには、次のとおりです。

DECLARE @tbl TABLE(docId varchar(100), verId int, apprvDt datetime, old_verId int) 
insert into @tbl values('A',  3 ,  '03/20/2017', 2) 
insert into @tbl values('A',  2 ,  '03/18/2017', 1) 
insert into @tbl values('A',  1 ,  '03/16/2017', NULL) 
insert into @tbl values('B',  1 ,  '03/18/2017', NULL) 
insert into @tbl values('C',  2 ,  '03/20/2017', 1) 
insert into @tbl values('C',  1 ,  '03/16/2017', NULL) 
select * from @tbl 

;with data_table 
as 
(
select docId,verId,apprvDt,old_verId, 
(select apprvDt from @tbl T2 where T2.docId=t1.docid and  T2.verId=t1.old_verId) 
old_apprvDt from @tbl t1 
) 
select * from data_table where docId='A' and verId=3 

結果は以下の通りです:

------------------------------------------------------------------------------------- 
docId  verId apprvDt      old_verId  old_apprvDt 
------------------------------------------------------------------------------------- 
    A  3  2017-03-20 00:00:00.000  2    2017-03-18 00:00:00.000 
+0

非常に良い先生。どうもありがとう... – Tres

0
select t1.*, 
     b.apprvdt as old_apprvdt 
from table1 t1 
cross apply 
(
select apprvdt from table1 t2 where t1.docid=t2.docid 
and t2.old_verid =t1.verid) b 
+0

返されたold_apprvdtが正しくありません。返されたテーブルには一部の行がありません。 – Tres

+0

ご注文はありません – Serg

関連する問題