2016-03-21 11 views
0

Im Folgenden ist der Fall, ist dies einfach Datengruppe aber join/Gruppierung Kommissionierung doppelte Daten ....Tabelle Join mit eindeutigen Werten

CREATE TABLE #t1 (UnID bigint IDENTITY(1,1), name varchar(5), id bigint) 
insert into #t1 (name,id)values('a',1) 
insert into #t1 (name,id)values('a',2) 
insert into #t1 (name,id)values('a',3) 
insert into #t1 (name,id)values('a',4) 
insert into #t1 (name,id)values('b',5) 
insert into #t1 (name,id)values('c',6) 

CREATE TABLE #t2 (name varchar(5), id bigint) 
insert into #t2 (name,id)values('a',1) 
insert into #t2 (name,id)values('a',2) 
insert into #t2 (name,id)values('a',3) 
insert into #t2 (name,id)values('b',4) 
insert into #t2 (name,id)values('c',5) 

select 
a.UnID, a.name as aName, a.Id as aId, b.Id as bId 
into #t3 
from #t1 a 
join #t2 b on a.name = b.name 

select max(bid),unid from #t3 
group by UnId 

Ergebnis Gruppierung

bid unid 
3 1 
3 2 
3 3 
3 4 
4 5 
5 6 

Gruppierung erwünscht Ergebnis

und wenn Gebot nicht dann null gefunden

+0

I Ich versuche mich an zwei Tischen zu vereinen und möchte jedes Mal das nächste Spiel auswählen. Wenn Sie denken, es gibt eine andere Möglichkeit, dies zu tun, dann schlagen Sie bitte –

+0

Ausgezeichnete Job-Veröffentlichung ddl und Beispieldaten zusammen mit der gewünschten Ausgabe. Was ich hier nicht verstehe, sind die Regeln. Außerdem gibt die von Ihnen gepostete Abfrage den von Ihnen gewünschten Status wie gewünscht zurück. Wenn Sie die Anforderungen klären können wir Ihnen helfen. –

+0

ich versuche, zwischen zwei Tabellen zu verbinden ABER wollen nächste Spiel auswählen, wenn das gleiche Spiel gefunden wird. Wie Sie in den letzten beiden Gruppenergebnissen sehen können, entspricht das erste Ergebnis 3-Gebot mit UnId-1 und 2. –

Antwort

0

Unten macht mich möglich, aber noch auf der Suche nach besserem Ansatz ist XID zusätzliches Feld Schleifenwert zum Halten ....

CREATE TABLE #t4 (ID bigint IDENTITY(1,1), bid bigint) 

SELECT 
a.UnID, a.name as aName, a.Id as aId, b.Id as bId,NULL as xid 
INTO #t3 
FROM #t1 a 
JOIN #t2 b ONa.name = b.name 

DECLARE t_cursor CURSOR FOR 
SELECT max(bid),unid 
FROM #t3 
GROUP BY UnId 
DECLARE @bid bigint, @unid bigint 

OPEN t_cursor 

FETCH NEXT FROM t_cursor 
INTO @bid, @unid 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    DECLARE @maxBid BIGINT 
    SET @maxBid = 0 
    SELECT @maxBid = max(bid) 
    FROM #t3 
    WHERE UnId= @unid 
    AND NOT bid IN (SELECT #t4.bid FROM #t4) GROUP BY UnId 

    INSERT into #t4 
    SELECT @maxBid as bid 

    set @maxBid = isnull(@maxBid,0) 
    if(@maxBid != 0) 
    begin 
     update #t3 set xid = @maxBid where unid = @unid 
    end 

    FETCH NEXT FROM t_cursor 
    INTO @bid, @unid 
END 
CLOSE t_cursor; 
DEALLOCATE t_cursor; 

SELECT * FROM #t3 order by unid,bid 

SELECT max(xid),unid from #t3 
group by UnId 
Verwandte Themen