2017-07-09 1 views
0

i haben Tisch wie:Abrufen hierarchischen Daten

emp id | post | manager id 
---------------------------- 
1  | l1 | 2 
2  | l2 | 3 
4  |l1 | 2 
3  | l3 | null 
----------------------------- 

Ich habe eine weitere Tabelle, wie:

emp id | target achived | given target | 
---------------------------------------- 
1  | 200   | 300 
--------------------------------------- 
4  | 400   | 500 

I eine Funktion haben, die eine Mitteilung zu machen, wie

l1 id----target achived/target given 

1 , 200/300 4, 400/500

(oben genannte Benachrichtigung emp id 2 wird erhalten, wer ist ein l2) alle l2 wird Benachrichtigung wie folgt bekommen.

l3 wird sms von l2 bekommen nur für gegebenen Fall l2 Ziel achived = alle durch seine alle l1 achived Ziel

so emp id 3 wird wie erhalten --------

empid 2--- 2, 600/800 

wie die Abfrage zu entwerfen ist verallgemeinerte Art und Weise, dass Tiefe der Hierarchie kann alles sein .. eigentliche Arbeit wird nur von l1 getan. Benachrichtigung wird wie sein-- l2 wird nur Ergebnis seiner eigenen l1 bekommen. l3 wird Ergebnis seiner eigenen l2 (Summe des Ergebnisses der entsprechenden l1) und entsprechende l2 SMS auch ... so weiter .....

+0

wenn ich Abfrage verwenden wie ---- wählen Ziel achived, Ziel von Zieltabellen gegeben, in dem emp-ID in (wählen emp id wo Manager id = 2 von emptable) – programmer

+0

für l3 Abfrage wird wie select sum (Ziel ached), Summe (Ziel gegeben) von targettable wo emp id in (wählen Sie empid von leerbar wo Manager ID = 3) ---- für l3 und höhere Hierarchie wird dies nicht funktionieren – programmer

Antwort

0

In Oacle haben Sie "Connected by" zu Hierarchische Abfragen ausführen.

Hier ist ein Link zu AskTom zu diesem Thema. Sie können auch Google "Oracle Connected By" googeln.

CONNECT BY basics

Ich habe keine Oracle installiert, so kann ich es nicht testen, aber dies ist, wie Sie die erzielten/Zielsummen von Manager bekommen können:

die hierarchischen Ergebnisse für die Berichte von Manager Manager Get . Erhalten Sie die Statistiken für jeden Manager, als ob sie ihre eigenen Chefs wären, um die Informationen in ihren eigenen Bericht aufzunehmen. Verknüpfen Sie die beiden Informationssätze. Und fassen Sie die Informationen von Manager zusammen.

Wieder könnte die Abfrage Tippfehler haben, aber die Stratergy sollte funktionieren.

select sum(c_achieved), sum(c_target), c_manager 
from 
(
    -- Get the metrics of each manager's reports 
    select all_info.t_achieved c_achieved, all_info.t_target c_target, all_info.manager c_manager 
    from 
    (select emp_id, post, manager, t_achieved, t_target 
    from emps, targets 
    where emps.emp_id = targets.emp_id) all_info 
    start with all_info.manager is null 
    connect by prior all_info.emp_id = all_info.manager 
    union 
    --Get the metrics of the managers to add them to themelves 
    select all_info2.t_achieved, all_info2.t_target, all_info2.emp_id 
    from 
    (select null, post, emp_id, t_achieved, t_target 
    from emps, targets 
    where emps.emp_id in (select distinct manager from emps) all_info_2 
    where all_info_2.emp_id = all_info_2.manager 
) stats_by_manager 
group by c_manager 
+0

Wie von hilfe geholfen wird hier pls helfen, die zu machen Abfrage – programmer

Verwandte Themen