2016-09-22 62 views
0

我有一個要求一樣,在一個表中有都柱和價值觀像下面在編寫SQL查詢時需要幫助

Emp ID Address Department Supervisior ID 
1001 Chennai Science  123 
1001 Chennai Science  124 
1001 Chennai Science  125 
1002 Chennai Science  128 
1003 Chennai Science  123 
1003 Chennai Science  124 
1003 Chennai Science  126 
1004 Bangalore Science 129 
1005 Mumbai Science 130 
1005 Mumbai Science 131 
1005 Mumbai Science 132 

從I/P表,我會提示輸入監理ID(即Supervisior id是123)。如果我提示,我查詢的輸出應該是

Emp ID Address Department Supervisior ID 
1001 Chennai Science 123 
1002 Chennai Science 128 
1003 Chennai Science 123 
1004 Bangalore Science 129 
1005 Mumbai Science 130 

的要求是,從表中,如果我提示監理ID 123,我要挑都具有監理ID作爲123,但第一記錄三個記錄相同,唯一不同的是監督ID。所以我不想排第二和第三。

另外,我想其他記錄有supervisior id不等於123.So我想要行號4和8.但最後三行是相同的,唯一的區別是supervisior id。從最後三位,我只需要一行(即第9行)。

我試過聯合查詢和完全外部聯接。沒什麼爲我工作。

+0

目前還不清楚你的意思是「挑選所有具有監督Id的記錄123」和「我還想要其他記錄,其監督id不等於123」。當然,這是所有的記錄? –

回答

0

在您的查詢中使用「group by」&「min」,如下所示。

 
/****** Dataset ****************/ 
with tabl(Emp_ID, Address, Department, Supervisior_ID) as 
(select 1001 , 'Chennai', 'Science' , 123 from dual 
    UNION ALL 
    select 1001 , 'Chennai', 'Science' , 124 from dual 
    UNION ALL 
    select 1001 , 'Chennai', 'Science' , 125 from dual 
    UNION ALL 
    select 1002 , 'Chennai', 'Science' , 128 from dual 
    UNION ALL 
    select 1003 , 'Chennai', 'Science' , 123 from dual 
    UNION ALL 
    select 1003 , 'Chennai', 'Science' , 124 from dual 
    UNION ALL 
    select 1003 , 'Chennai', 'Science' , 126 from dual 
    UNION ALL 
    select 1004 , 'Bangalore', 'Science' , 129 from dual 
    UNION ALL 
    select 1005 , 'Mumbai', 'Science' , 130 from dual 
    UNION ALL 
    select 1005 , 'Mumbai', 'Science' , 131 from dual 
    UNION ALL 
    select 1005 , 'Mumbai', 'Science' , 132 from dual) 
/********You Main query goes from here *************/ 
select emp_id,Address, Department, min(Supervisior_ID) 
from tabl 
group by emp_id,Address, Department 
order by 1; 
0

MIN是你在找什麼。

SELECT EMP_ID, 
     ADDRESS, 
     DEPARTMENT, 
     NVL(
      MIN(DECODE(SUPERVISOR_ID,:L_SUPERVISOR_ID,SUPERVISOR_ID)), 
      MIN(SUPERVISOR_ID) 
      ) AS SUPERVISOR_ID 
FROM YOUR_TABLE 
GROUP BY EMP_ID,ADDRESS,DEPARTMENT 
ORDER BY EMP_ID,ADDRESS,DEPARTMENT,SUPERVISOR_ID; 

這裏的技巧是,MIN(DECODE(SUPERVISOR_ID,:L_SUPERVISOR_ID,SUPERVISOR_ID))

這將是NULL,當沒有匹配的ID,所以在這種情況下,只是做MINNVL照顧它。

當該組中存在匹配的管理員標識時,它將立即返回。