2016-10-18 5 views
0

に特定の条件に基づいてテーブルデータを取得する:私はemp_id.Ifのグループごとに分(EMP_SAL)を見つける必要があるテラでSQLを記述する必要Iデータ以下のテーブルを持っているテラ

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 

emp_idの1つ以上の行にはemp_grp = 'HMCPR'があり、それらの行のみを保持し、emp_salのminをとります。 emp_grp = 'HMCPR'の行がなく、そのグループからemp_salのminを取っていないときは何もしないでください。

あなたが混乱している場合は、お詫び申し上げます。上記の条件に基づいて、私の出力は次のようになります。

emp_id | emp_sal | emp_grp 

1   10  HMCPR 
2   40  HMCRR 

私は、クエリの下にしようとしたが、私はEMP_IDでグループを使用すると、それはグループごとに分(EMP_SAL)を与える、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

何らかのロジックで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 
+0

ありがとうございました!!!その作業は – user1768029

+0

です。Teradataには、OLAP関数の結果を直接フィルタリングするSQL拡張( 'HAVING')があります。' select * from db_wrk.emp_sin qualify row_number()over(emp_idを使ったパーティション order emp_grp = 'HMCPR'の場合は0、それ以外の場合は1、emp_sal)= 1' – dnoeth

関連する問題