根据Teradata中的特定条件检索表数据

时间:2016-10-18 21:14:26

标签: sql teradata

我有一张包含以下数据的表格:

emp_id | emp_sal | emp_grp

1          5       HMCCR
1         10       HMCPR
1         20       HMCPR
1         30       HMCPR
1         40       HMCRR
2         40       HMCRR
2         50       HMCCR

我需要在Teradata中编写sql,我需要为每组emp_id找到min(emp_sal)。如果一行或多行emp_id有emp_grp =' HMCPR'然后只保留那些行并占用emp_sal的min。当没有行有emp_grp =' HMCPR'时,不要做任何事情。并从该组中取出emp_sal的min。

道歉,如果你感到困惑。基于以上条件,我的输出应如下所示:

emp_id | emp_sal | emp_grp

1         10       HMCPR
2         40       HMCRR

我尝试了以下查询,但它为每个组提供了min(emp_sal),因为我使用了emp_id,emp_grp

sel
emp_id,
case when emp_grp='HMCPR' then min(emp_sal)
else min(emp_sal) end emp_sal,  emp_grp

from db_wrk.emp_sin 
group by emp_id, emp_grp

任何人都可以帮助我在teradata中获得预期的结果。

1 个答案:

答案 0 :(得分:1)

您可以使用row_number一些逻辑来使emp_grp HMCPR首先被排序(如果存在)。

select emp_id,emp_sal,emp_grp 
from (
select e.*, 
row_number() over(partition by emp_id 
                  order by case when emp_grp = 'HMCPR' then 0 else 1 end,emp_sal) as rn
from db_wrk.emp_sin e
) t
where rn = 1