2016-03-21 4 views
0

でテーブルに参加....は、ケースですこれは、単純なグループのデータであるが、重複データを選ぶ/グループに参加するユニークな値以下

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 

結果

bid unid 
3 1 
3 2 
3 3 
3 4 
4 5 
5 6 
のグループ化

グループ化希望結果

入札はその後、見つからない場合はnull
bid unid 
1 1 
2 2 
3 3 
NULL 4 
4 5 
5 6 

は、以下

+0

I ....ループ値を保持するための余分なフィールドであり、 2つのテーブルを結合しようとしていて、毎回次のマッチを選びたいと思っています。これを行う別の方法があると思われる場合は、私に連絡してください –

+0

優れた仕事はddlとサンプルデータを望ましい出力とともに掲示します。私がここで理解していないのはルールです。また、あなたが投稿したクエリは、あなたが望むステータスをあなたが望む出力として返します。要件を明確にすることができれば、私たちは助けることができます。 –

+0

私は2つのテーブルの間で結合をしようとしていますが、同じ一致が見つかった場合に次のマッチを選択します。最後の2つのグループ結果で見られるように、最初の結果3-bidはUnId-1と2に対して一致します。 –

答えて

0

が私を可能にするが、それでもより良い方法を探して、XIDは

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 
関連する問題