这是我的桌子,如果我们观察它有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
答案 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。