我需要在sybase

时间:2018-07-12 18:52:11

标签: sql sql-update sybase sybase-ase

这是我的桌子,如果我们观察它有6个match_id,其中3个是795,3个是td party和一些唯一的match_id。

我需要的是,如果有与同一方重复的match_id,我需要将重复的第一行标记为x,如果没有重复的行,我也需要将它们也标记为x。

如果我使用此查询:

select distinct match_id,party , count(match_id) from temp_table 
group by match_id,party having count(*) > 0

我能够计数,但是如何从中选择?


当前表:

match_id ------------ party--------  ind    
413082597------------ co-795    ---------                      
413082597------------ co-795                        
413082597------------ TD     
413082597------------ TD
413082597------------ TD
424421945-------      co-3376
424421946-------      co-3376

需要的是:

match_id -----    party ---------   ind
413082597------- CO-795   -----------x
413082597--------CO-795
413082597--------CO-795
413082597------ TD   ---------------x
413082597----   ----TD
413082597---------TD
424421945-------CO-3376------------   x
424421946----   CO-3376  ----------------x

1 个答案:

答案 0 :(得分:0)

我同意Gordon Linoff的观点。您需要一个附加字段来定义排序顺序,以便可以将一行指定为“第一”。假设您在seq列上升序排列,则SQL类似于

SELECT match_id, party, 
     IF EXISTS SELECT * FROM table t2 WHERE t2.match_id = t1.match_id
         AND t2.party = t1.party
         AND t2.id < t1.id
     THEN "" ELSE "x"
     END

FROM table t1
ORDER BY match_id, party, seq

上面的代码将为单例行生成一个“ x”。如果我正确阅读了您的请求,这就是您想要的。

另一种可能性是将标志(x或空白)列添加到临时表,并使用光标按排序顺序进行处理,以将x添加到每一行,除非前一行具有相同的键值。然后按排序顺序选择,包括标志行DESC。