2014-05-20 56 views
-2

我想追加/更新虛擬表中的記錄。如何追加/更新SQL Server虛擬表中的記錄?

TableA(ID,IdentifyingNumber,Included) TableB(ID,IdentifyingNumber,Included) 

    Records in TableA 
      1, 101, 0 
      2, 102, 1 
      3, 103, 1 

    Records in TableB 
      1, 201, 0 
      2, 202, 0 

我需要出去的兩個表中的記錄放於表C

TableC(IdentifyingNumberA,IncludedA,IdentifyingNumberB,IncludedB) 
    Records in TableC 
       101, 0, 201, 0 
       102, 1, 202, 0 
       103, 1, Null, Null 

這是我的第一個表

INSERT INTO @EntityListL(RowID,EntityID,IdentifyingNumberL,IncludedL) 
    SELECT ROW_NUMBER() OVER(ORDER BY d.EntityID DESC) AS Row, 
      d.EntityID,d.IdentifyingNumber,d.Included FROM @EntityList d 
    where d.Included = 0 
    ORDER BY d.IdentifyingNumber 

這是我的第二個表

INSERT INTO @EntityListR(RowID,EntityID,IdentifyingNumberR,IncludedR) 
    SELECT ROW_NUMBER() OVER(ORDER BY d.EntityID DESC) AS Row, 
      d.EntityID,d.IdentifyingNumber,d.Included FROM @EntityList d 
    where d.Included = 1 
    ORDER BY d.IdentifyingNumber 

我嘗試以低於SQL狀態退出012

select A.IdentifyingNumber as IdentifyingNumberL, A.Included as IncludedL, 
     B.IdentifyingNumber as IdentifyingNumberR, B.Included as IncludedR from 
(
    select ROW_NUMBER() OVER(ORDER BY IdentifyingNumber) AS Row, 
      IdentifyingNumber, Included 
    from @EntityList where Included=0 
) 
A 
left outer join 
(
    select ROW_NUMBER() OVER(ORDER BY IdentifyingNumber) AS Row, 
      IdentifyingNumber,Included from @EntityList where Included=1 
)B 
on A.Row=B.Row 

請讓我知道如何在SQL Server中實現。

感謝提前

+1

通過虛擬你是指臨時表嗎?你有沒有嘗試過任何事情,或者你只是希望有人會給你一個答案? – Tanner

+0

是的虛擬表中,我嘗試很多,但沒有執行出。 –

+1

添加你對這個問題的嘗試,然後任何人的答案可以使用它作爲基礎,並糾正錯誤。 – Tanner

回答

-1

使用此SQL ....

select A.IdentifyingNumber as IdentifyingNumberL, A.Included as IncludedL, 
     B.IdentifyingNumber as IdentifyingNumberR, B.Included as IncludedR from 
(
    select ROW_NUMBER() OVER(ORDER BY IdentifyingNumber) AS Row, 
      IdentifyingNumber, Included 
    from @EntityList where Included=0 
) 
A 
full outer join 
(
    select ROW_NUMBER() OVER(ORDER BY IdentifyingNumber) AS Row, 
      IdentifyingNumber,Included from @EntityList where Included=1 
)B 
on A.Row=B.Row 

該SQL給所有類型的記錄表。

2

這應該做的伎倆:

select a.IdentifyingNumber, a.Included, b.IdentifyingNumber, b.Included 
from #A a 
left outer join #B b on a.ID = b.ID 

這裏有一個完整的測試:

create table #A (ID int, IdentifyingNumber int ,Included int) 
create table #B (ID int, IdentifyingNumber int ,Included int) 

insert into #A values (1, 101, 0) 
insert into #A values (2, 102, 1) 
insert into #A values (3, 103, 1) 

insert into #B values (1, 201, 0) 
insert into #B values (2, 202, 0) 

select a.IdentifyingNumber, a.Included, b.IdentifyingNumber, b.Included 
from #A a left outer join #B b on a.ID = b.ID 

結果:

IdentifyingNumber Included IdentifyingNumber Included 
----------------- ----------- ----------------- ----------- 
101    0   201    0 
102    1   202    0 
103    1   NULL    NULL 

說得到一個新的臨時表中你需要列名來區分:

SELECT a.IdentifyingNumber AS IdentifyingNumberA 
    ,a.Included AS IncludedA 
    ,b.IdentifyingNumber AS IdentifyingNumberB 
    ,b.Included As IncludedB 
INTO #C 
FROM #A a 
LEFT OUTER JOIN #B b ON a.ID = b.ID 
+0

但TableB有7條記錄,並且TableA有5條記錄放並不完美。 –

+0

我已經精確地複製了您的示例,其中包含三個和兩個記錄的表格,就像您問的一樣。如果它沒有做你想做的事,那麼你沒有很好地問這個問題。 –

+0

我剛剛在[此SQL小提琴](http://sqlfiddle.com/#!6/b244d/3/0)中嘗試了Matt的代碼,它顯示了問題的預期結果。 –

相關問題