2017-12-16 17 views
0

1つのクエリの値に基づいて行をフェッチしたい。私はこれがサブクエリを使用して行うことができることを知っているが、私は実行し、特定の条件に基づいて1つのクエリを使用して詳細をフェッチし、詳細がいくつかの値を含んで詳細に他の値を使用して、詳細は外部クエリを使用します。sql:一度に複数行の情報を取得する

例: 従業員が会計年度に複数の部門(a、b、c、dなど)に所属し、会計年度に従業員が1つ以上の部門に所属できるとします。私は最新の会計年度のすべての従業員の詳細を取得し、部門cに所属したいと考えています。

EMPLOYEE_DEPARTMENTSは、外部キー(従業員IDと会計年度の組み合わせ)と部門IDなどの情報を含むテーブルです。 外部キーは123_1718のようなもので、1718は会計年度を示し、123は従業員IDです。私たちが部署cに属する従業員を取り出すと、従業員の他の詳細を他のテーブルから取得したいと考えています。

これは、すべての会計年度の従業員所属部門cを検索するために複数のSQLを作成し、会計年度内に従業員が部門cに属するかどうかをチェックし、しかし、私はpl/sqlやそれを介して私はすべての詳細を一度に取得できる何かを書くことができる方法があります。

例:

EMPLOYEE_DEPARTMENTS 
———————————————————— 
ID_EMPFY  ID_DEPARTMENT 
1    3 
2    1 
2    2 
1    3 
4    1 
3    2 
4    3 
4    2 


EMPLOYEE 
ID NAME ID_DEPARTMENT  CITY 

DEPARTMENT 
ID NAME 
1 a 
2 b 
3 c 

EMPLOYEE_FINANCIALYEAR 
ID ID_EMPLOYEE FINYEAR 
1 123    1718 
2 123    1516 
3 456    1718 
4 234    1718 

私は会社の一部であった従業員に任意の最後の会計年度できる部門cとFINYEARに所属する従業員を取得する必要があります。これは従業員が社内で昨年を見つけなければならないことを意味します(これはEMPLOYEE_FINANCIALYEARテーブルを使用して行うことができます)。そして、昨年の部門がcであるかどうかを確認し、EMPLOYEE_DEPARTMENTSからID_EMPFYを使用する場合はEMPLOYEE_FINANCIALYEARからEMPLOYEE_Dを取得し、 ID_EMPLOYEEは、従業員のすべての詳細を取得します。

ご協力いただきありがとうございます。

+0

あなたが参加し、内側を説明しているようですね。シンプルなサンプルテーブルとクエリから得たい出力を提供した場合に役立ちます。 –

答えて

1

あなたは、このクエリを使用することができます。

WITH LAST_EMPLOYEE_FINANCIAL_YEAR AS 
(
SELECT * 
FROM (SELECT T.*, 
       ROW_NUMBER() OVER(PARTITION BY T.ID_EMPLOYEE ORDER BY T.FINYEAR DESC) ROW_NUM 
     FROM EMPLOYEE_FINANCIALYEAR T 
     ) 
WHERE ROW_NUM = 1 
) 
SELECT * 
FROM LAST_EMPLOYEE_FINANCIAL_YEAR EF 
INNER JOIN EMPLOYEE_DEPARTMENTS ED ON ED.ID_EMPFY = EF.ID 
INNER JOIN DEPARTMENT D ON D.ID = ED.ID_DEPARTMENT 
     AND D.NAME = 'C'; 
+0

救い主になってくれてありがとう。驚くばかり!! – Abhinav

関連する問題