任何案件陈述

时间:2016-06-22 07:26:53

标签: sql oracle oracle11g

我有一些E_idsd_ids中的o_count(1,0,null)中的几个E_IDs相关联。 因此,如果O_count = 1中有任何O_count = 1E_ID else 0,我必须将其分成一行并为e_idsSELECT DISTINCT E_ID, status (CASE WHEN o_count = any(1) THEN 1 WHEN o_count = any(0) THEN 0 ELSE null END ) Ocount FROM (SELECT e_id, status, o_count FROM A) GROUP BY e_id, status, o_count

但是当我执行下面的操作时,我得到的所有行都没有分组,即我得到两行相同的sorted。有没有其他方法可以做同样的事情?

keys

2 个答案:

答案 0 :(得分:0)

是的,只需用MAX()包裹它:

SELECT E_ID,status
        MAX(case when o_count = 1 then 1 ELSE 0 END) as Ocount 
FROM A
GROUP BY e_id,status

此外,子查询是不必要的,你没有在那里做任何逻辑。

答案 1 :(得分:0)

首先,您按e_id, status, o_count分组。这意味着您聚合数据,以便为每个此类组合获得一行。您是否只想单独e_ide_idstatus获得一个结果行?

然后,您的case构造不包含任何聚合函数,只有o_countgroup by子句的一部分。因此,您正在查看您希望o_count = any(1)的一行,当然与o_count = 1完全相同,因为指定集中只有一个值。您可以仅使用case替换完整的o_count表达式。

然后你申请distinct。但是没有重复项,因为您按所使用的所有列进行分组。所以distinct在这里没有做任何事情。

从没有任何where子句或聚合的子查询中进行选择也是多余的,您可以直接从表a中进行选择。

您的查询可以重写为

select distinct e_id, status, o_count
from a;

我想你想要这样的东西:

select e_id, status, max(o_count)
from a
group by e_id, status;

或者这个:

select e_id, max(status), max(o_count)
from a
group by e_id;