2017-05-25 4 views
0

Ich denke, es sollte eine einfache Möglichkeit sein, dies zu tun.Wie kann ich zwei Ergebnismengen mit einer gemeinsamen Spalte kombinieren?

zwei Tabellen (ID ist Primärschlüssel, keine Duplikate):

TblQtyNew   TblQtyUsed 

ID | QtyNew   ID | QtyUsed 
1 15    1 7 
2 18    3 21 

Wie kann ich das folgende Ergebnis erhalten?

ID | QtyNew | QtyUsed 
1 15  7 
2 18  NULL 
3 NULL  21 

Die einzige Lösung, die ich mit gekommen sind beinhaltet eine UNION auf der ID-Spalte dann zwei links schließt sich:

(SELECT ID FROM TblQtyNew) UNION (SELECT ID FROM TblQtyUsed) as IDs 
LEFT JOIN 
(SELECT QtyNew FROM TblQtyNew) ON TblQtyNew.ID = IDs.ID 
LEFT JOIN 
(SELECT QtyUsed FROM TblQtyUsed) ON TblQtyUsed.ID = IDs.ID 

Gibt es eine einfache Möglichkeit, dies zu tun?

Antwort

1

Sie können wie unten in ID verwenden voll verbinden und verschmelzen:

select coalesce(t1.id,t2.id) as Id, Qtynew, QtYused 
    from #table1 t1 full join #table2 t2 
    on t1.id = t2.id 

Ausgang:

+----+--------+---------+ 
    | Id | Qtynew | QtYused | 
    +----+--------+---------+ 
    | 1 | 15  | 7  | 
    | 2 | 18  | NULL | 
    | 3 | NULL | 21  | 
    +----+--------+---------+ 
+0

Koaleszieren! Ich wusste, dass es mich ins Gesicht starrte! –

0
select Id, QtyNew, QtyUsed 
from TblQtyNew Full outer join TblQtyUsed 
on TblQtyNew.ID=TBLQtyUsed.ID 
1

Sie wollen ein FULL OUTER JOIN:

SELECT COALESCE(T1.ID,T2.ID) as ID, T1.QtyNew, T2.QtyUsed 
FROM TblQtyNew T1 
FULL OUTER JOIN TblQtyUsed T2 on T1.ID = T2.ID 
+0

Das wird 'NULL' statt ID geben 3 – Sami

+0

@ Sami Doh, danke Sami, behoben. –

1

Verwenden FULL JOIN und Case:

DECLARE @T1 TABLE (id int , QtyNew int); 
DECLARE @T2 TABLE(id int , QtyUsed int); 

insert into @T1 values (1,15),(2,18); 
insert into @T2 values (1,7),(3,21); 

SELECT ID = case when T1.ID IS not Null then T1.ID else T2.ID end, T1.QtyNew, T2.QtyUsed 
FROM @T1 T1 
full JOIN @T2 T2 on T1.ID = T2.ID 
Order by ID; 

Demo

1

1.

SELECT ID,SUM(ISNULL(QtyNew)) AS QtyNew,SUM(ISNULL(QtyUsed)) AS QtyUsed 
FROM (
    SELECT ID,QtyNew,NULL AS QtyUsed FROM TblQtyNew 
    UNION ALL 
    SELECT ID,NULL QtyNew, QtyUsed FROM TblQtyUsed 
) AS t 
GROUP BY ID 

2.

SELECT COALESCE(n.ID,U.ID) AS ID,n.QtyNew,u.QtyUsed 
FROM TblQtyNew AS n FULL OUTER JOIN TblQtyUsed AS u ON n.ID=u.ID 
1

ich alternative Methode absichtlich versucht.

declare @TblQtyNew table (ID int,QtyNew int) 
insert into @TblQtyNew VALUES 
(1,15)   
,(2,18) 

    declare @TblQtyUsed table (ID int, QtyUsed int) 
    insert into @TblQtyUsed VALUES 
(1 ,7) 
,(3 ,21) 

;with CTE as 
(
select a.id,QtyNew,b.QtyUsed from @TblQtyNew a 
inner join @TblQtyUsed b on a.id=b.ID 
) 
select * from CTE 
union all 
select a.id,QtyNew,null 
from @TblQtyNew a 
where not exists(select id from cte c where c.id=a.id) 

union all 
select a.id,null,QtyUsed 
from @TblQtyUsed a 
where not exists(select id from cte c where c.id=a.id) 
Verwandte Themen