子查询,如果列的所有值都相同,则派生一个值

时间:2014-10-21 10:27:53

标签: sql oracle

嗨我在这里遇到Oracle SQL的情况,如下所示:sql结果: -

Company    No of Employees    Group      Derived Field
   a               1            x 
   b               1            x  
   c               2            y 
   d               1            y

所以基于该组,如果所有公司都有相同的员工,那么我想要派生字段 真的是假的。

因此对于组x,如果公司a和b具有相同的员工数量,那么派生字段为 a和b是真的。至于c和d因为员工的数量不同所以派生领域 应该是假的。

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

您想使用分析功能。我想这就是你想要的:

select t.*,
       (case when min(NumEmployees) over (partition by grp) =
                  max(NumEmployees) over (partition by grp)
             then 1
             else 0
        end) as DerivedField
from table t;

注意:我通常将布尔值表示为0和1。

答案 1 :(得分:0)

这是一个纯粹的SQL解决方案。假设列名是company,number,ggroup,test。

为方便起见,将表t的视图创建为

创建视图gnums作为选择计数(不同的数字)为gnum,count(数字)为num,ggroup来自t group by ggroup;

此选择

选择a。*,b.gnum = 1和b.num<> 1作为来自t a的测试,gnums b其中a.ggroup = b.ggroup;

产量

 id | company | number | ggroup | test
----+---------+--------+--------+------
  1 | a       |      1 | x      | t
  2 | b       |      1 | x      | t
  3 | c       |      2 | y      | f
  4 | d       |      1 | y      | f
  5 | e       |      2 | z      | f

我添加了行e来表明任何只有一家公司的团队应该产生错误,假设这是你想要的。