我绞尽脑汁并广泛搜索以寻找解决方案,我怀疑我可能没有清楚地问这个问题所以请耐心等待。
我必须构建一些基于以下基础过滤记录的查询。虽然提取数据涉及多个表格,但我仍然坚持基本要求。
以下是样本值:
Key | Decision
123 | Complete
123 | Additional info
123 | Something
123 | Complete
.
.
.
254 | Complete
254 | Complete
254 | Complete
.
.
.
根据以上数据,我可以按键和决策进行选择和分组,以获得如下数据集:
Key | Decision
123 | Complete
123 | Additional info
123 | Something
.
.
.
254 | Complete
.
.
.
我需要的实际数据有两种类型(这些是必须构建的separe查询)
1)唯一决定是“完成”的键 - 在上面的例子中,只有Key = 254匹配
2)决策可能包含“附加信息”的密钥 - 在上面的例子中,只有Key = 123匹配
似乎几乎可能,就像我的答案浮动在某个地方,我无法理解它。或者这是一厢情愿的想法?
我确实尝试了以下
select key from table where decision not in (select key from table where decision <> "Complete")
这让我得到了我想要的决定=完成的结果。但是,由于最终选择至少包含至少三个连接,我怀疑性能会变差。查询将在Oracle 11g上执行。
如果有人有建议可以帮助我摆脱这种想法,我会非常感激。
答案 0 :(得分:1)
对于第一个问题
select `key` from your_table
group by key
having count(decision) = sum(decision="complete")
为第二个
select `key` from your_table
where decision = 'Additional Info'
group by `key`
答案 1 :(得分:0)
1)唯一决定为“完成”的键 - 在上面的示例中,只有Key = 254匹配
select key
from table
group
by key
having min(decision) = 'Complete'
and max(decision) = 'Complete'
或@nick rulez使用以下修改编写的内容(以使其在Oracle上运行):
having count(decision) = sum(case when decision = 'Complete' then 1 else 0 end)
2)决策可能包含“附加信息”的键 - 在上面的示例中,只有Key = 123匹配
select distinct key
from table
where decision = 'Additional info';