通过使用SQL查询或过程,我需要帮助才能获得此结果。我的样本表结构如下所示。
必填结果:
docid status
24 Waiver Requested
26 Waiver Requested
27 Rejected
表A:
docid
----------
24
26
27
表b:
docid Status
24 Waiver Requested
26 Rejected
26 Waiver Requested
27 Rejected
27 Rejected
答案 0 :(得分:0)
不了解您提供的所有业务规则,这是一个更通用的解决方案。
创建另一个表(或者您的数据模型已经有一个表),其中包含可能的状态:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
此表用于按优先顺序对状态进行排名。换句话说,如果在重复的情况下应该选择“拒绝请求”而不是“已拒绝”,则使用优先级1表示弃权,2表示拒绝。
所以现在查询可以使用这个额外的排名表:
SELECT b.docid, r.status
FROM b,
status_rank r,
(SELECT b.id, min(r.rank)
FROM b, status_rank r
WHERE b.status = r.status
GROUP BY id) s
WHERE b.docid = s.docid
AND r.rank = s.rank
AND b.status = r.status;
有很多方法可以实际进行查询,但这应该会向您展示一般的想法。
答案 1 :(得分:-1)
这是一篇非常好的MSDN文章“查找和/或删除重复行” http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=DuplicateRows 希望这会有用。