Невозможно установить идентификатор столбца в случае левого внешнего соединения - PullRequest
0 голосов
/ 21 июня 2011

У меня есть некоторая запись как для 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 станет> 1 в 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 

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 21 июня 2011
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
0 голосов
/ 21 июня 2011

Давайте рассмотрим пример, где позиция c1 в таблице tblComplete

Вы заметите, что в вашем примере равно соответствующей строки в tblFiltered

, поэтому tblFiltered.ID для строки с позицией c1 на самом деле равен NULL

. Возможно, вы захотите сделать оператор case для идентификатора или включить только те строки, в которых есть совпадение в tblFiltered?

Дайте нам знать, какой из них, и мы можем помочь вам.

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