Solved

levels for reporting

Posted on 2016-09-26
5
92 Views
Last Modified: 2016-11-21
Hi,
Below query gives below results:

select

*

from

(

Select

a.position_nbr,

a.REPORTS_TO,

a.POSITION_desc,

a.Position_level

ROW_NUMBER() OVER (PARTITION BY a.position_nbr ORDER BY a.EFFDT DESC) AS RN

from PS_POSITION_DATA a
)

where RN='1'


 

position_nbr reports_to   POSITION_desc Position_level

143               12                          CEO                                  CEO

038              143                        DIRECTOR                       DIR

0418             143                       ADVISOR                        ADV

114              143                       DG                                   DG

346              114                     Manager                          MAN

202              114                    Lead                                  LEAD

 

 

 
i want results like below so idea is start from level1 where position_level ='CEO ' and show who reports to CEO and then who reports to DG etc. Max level is 8

 

level1  level2 level3 level4 level5 level6 level7 level8  position_desc position_level

143                                                                                              CEO            CEO

          038                                                                                  DIRECTOR        DIR

          0418                                                                              ADVISOR         ADV

          114                                                                              DG              DG

                   346                                                                  Manager         MAN

                   202                                                                  Lead            LEAD
0
Comment
Question by:sam2929
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 28

Expert Comment

by:Pawan Kumar
ID: 41817063
Here is the complete code

;WITH CTE
AS 
(

	Select position_nbr , reports_to , POSITION_desc , Position_level, 0 Level
	From PS_POSITION_DATA  E Where E.REPORTS_TO = 'CEO'
    
	UNION ALL
    
	Select E.position_nbr, E.reports_to, c.Level + 1 ,  E.POSITION_desc , E.Position_level
	From PS_POSITION_DATA  E INNER JOIN CTE c on c.position_nbr = e.REPORTS_TO 

)
SELECT * FROM CTE H 
	 

Open in new window


Enjoy !!
0
 
LVL 22

Expert Comment

by:Helena Marková
ID: 41817277
Mybe you can try hierarchical query:
SELECT LPAD(' ',2*(LEVEL-1)) || to_char(position_nbr) lvl ,
        POSITION_desc, Position_level
    FROM PS_POSITION_DATA
    START WITH Position_level = 'CEO'
    CONNECT BY PRIOR position_nbr = reports_to NOCYCLE;

http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10002.htm#SQLRF01702
0
 
LVL 37

Accepted Solution

by:
Geert Gruwez earned 500 total points
ID: 41817683
you can use sys_connect_by_path to display the hierarchy

select  position_nbr, REPORTS_TO, POSITION_desc, 
  level position_level, 
  sys_connect_by_path(position_desc, ' / ') reporting_chain
from PS_POSITION_DATA 
connect by prior position_nbr = reports_to 
start with POSITION_desc = 'CEO'

Open in new window

0
 

Author Comment

by:sam2929
ID: 41837728
pawan your code don't work
0
 
LVL 28

Expert Comment

by:Pawan Kumar
ID: 41857957
@Author - Can you post the error you r facing ?
0

Featured Post

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Working with Network Access Control Lists in Oracle 11g (part 1) Part 2: http://www.e-e.com/A_9074.html So, you upgraded to a shiny new 11g database and all of a sudden every program that used UTL_MAIL, UTL_SMTP, UTL_TCP, UTL_HTTP or any oth…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
This video shows setup options and the basic steps and syntax for duplicating (cloning) a database from one instance to another. Examples are given for duplicating to the same machine and to different machines
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question