2016-08-17 9 views
3

Ich habe eine Tabelle von Benutzern und eine Tabelle ihrer Verträge. Ich habe zwei Auswahlen. Die erste, die alle aus der Benutzer-Tabelle auswählt und die zweite, die nur neue Benutzer (aus einer anderen Benutzertabelle) für "heute" auswählt. Ich muss diese beiden Ergebnisse verbinden, aber es gibt ein Problem.SQL Server: verbinden Sie zwei Ergebnisse mit bestimmten Zeile

Jeder Benutzer hatte Spalte "rournumber", es hängt von der Anzahl der Verträge für jeden Benutzer ab (jeder Benutzer kann 1 oder mehrere Verträge haben). Ich brauche eine neue Nummer für die neue Reihe. Siehe Beispiel

Die erste Auswahlrückkehr:

user_id | contract_id | rownumber 
1   456   1 
1   457   2 
1   699   3 

Die zweite Auswahl wählt neue Zeilen für die Benutzer:

user_id | contract_id 
1   1024 
1  | 1079 

Und ich brauche diese Ergebnisse zu verbinden dieses Endergebnis zu erhalten:

user_id | contract_id | rownumber 
1   456   1 
1   457   2 
1   699   3 
1   1024   4 
1   1079   5 

Wie kann ich das tun?

+2

Beginnen Sie mit einer UNION ALL. – jarlh

Antwort

3
;with cte 
as 
(
select 
user_id,contractid from table1 
union all 
select 
user_id,contractid from table2 
) 
select *,row_number() over (partition by user_id order by contractid) from cte 
+0

'Partition von user_id' Ich denke. – Serg

+0

@Serg: Danke, verpasst es – TheGameiswar

0
select USER_ID, CONTRACT_ID,ROWNUMBER 
from TABLE1 
union all 
select USER_ID, CONTRACT_ID,rownum+num 
from TABLE2,(select max(ROWNUMBER) as num 
from TABLE1); 

Vereinigung alle wird auch doppelte Daten angezeigt werden. Wenn Sie keine doppelten Datensätze möchten, ersetzen Sie union alle durch union

Verwandte Themen