我有 tblFiltered
的记录ID RowID Position Data
1 1 a1 R
1 1 b1 N
1 1 e1 K
1 1 g1 N
1 1 h1 R
1 2 b2 T
1 2 c2 B
1 2 d2 Y
1 2 f2 F
表 tblComplete 具有以下数据
RowID Position Data
1 a1 NULL
1 b1 NULL
1 c1 NULL
1 d1 NULL
1 e1 NULL
1 f1 NULL
1 g1 NULL
1 h1 NULL
2 a2 NULL
2 b2 NULL
2 c2 NULL
2 d2 NULL
2 e2 NULL
2 f2 NULL
2 g2 NULL
2 h2 NULL
所需的输出是
ID RowID Position CompleteData
1 1 a1 R
1 1 b1 N
1 1 c1 NULL
1 1 d1 NULL
1 1 e1 K
1 1 f1 NULL
1 1 g1 N
1 1 h1 R
1 2 a2 NULL
1 2 b2 T
1 2 c2 B
1 2 d2 Y
1 2 e2 NULL
1 2 f2 F
1 2 g2 NULL
1 2 h2 NULL
这意味着不在tblFiltered中的记录将从tblCompelete获取并且将被填充。 例如c1,d1和f1不在tblFiltered中,此后从tblCompelte中获取并添加到结果输出中。
我写了查询
select t.ID,c.RowID,c.Position,
CompleteData = case when t.Data IS null then null else t.data end
from @CompleteData c
left join @tblFiltered t
on c.Position = t.Position
,其输出为
ID RowID Position CompleteData
1 1 a1 R
1 1 b1 N
NULL 1 c1 NULL
NULL 1 d1 NULL
1 1 e1 K
NULL 1 f1 NULL
1 1 g1 N
1 1 h1 R
NULL 2 a2 NULL
1 2 b2 T
1 2 c2 B
1 2 d2 Y
NULL 2 e2 NULL
1 2 f2 F
NULL 2 g2 NULL
NULL 2 h2 NULL
可以看出,我无法设置ID 。此外,如果ID变为>在tblFiltered中,我将如何跟踪它?
DDL
Declare @tblFiltered table(ID int,RowID int,Position varchar(10),Data varchar(10))
Insert into @tblFiltered
Select 1,1,'a1','R' union all
Select 1,1,'b1','N' union all
Select 1,1,'e1','K' union all
Select 1,1,'g1','N' union all
Select 1,1,'h1','R' union all
Select 1,2,'b2','T' union all
Select 1,2,'c2','B' union all
Select 1,2,'d2','Y' union all
Select 1,2,'f2','F'
Declare @CompleteData table (RowID int,Position varchar(10),Data varchar(10))
Insert into @CompleteData
select 1, 'a1', Null Union All
select 1, 'b1', Null Union All
select 1, 'c1', Null Union All
select 1, 'd1', Null Union All
select 1, 'e1', Null Union All
select 1, 'f1', Null Union All
select 1, 'g1', Null Union All
select 1, 'h1', Null Union All
select 2, 'a2', Null Union All
select 2, 'b2', Null Union All
select 2, 'c2', Null Union All
select 2, 'd2', Null Union All
select 2, 'e2', Null Union All
select 2, 'f2', Null Union All
select 2, 'g2', Null Union All
select 2, 'h2', Null
--Select * from @tblFiltered
--Select * from @CompleteData
提前致谢
答案 0 :(得分:0)
让我们以表tblComplete
中的位置为c1为例您会注意到,在您的示例中, 在tblFiltered中没有对应的行
所以位置为c1的行的tblFiltered.ID实际上是NULL
也许您想对ID做一个案例陈述 或者只包括tblFiltered中匹配的行?
让我们知道哪一个,我们可以帮助您。
答案 1 :(得分:0)
select 1 as ID,
C.RowID,
C.Position,
F.Data
from tblComplete as C
left outer join tblFiltered as F
on C.Position = F.Position
order by C.RowID, C.Position