Solved

SQL Server - Heirarchy Question

Posted on 2009-04-08
10
154 Views
Last Modified: 2012-05-06
Hello all,

I have a table called "Customer" and this table has a few fields CustID and CustParentID, I need to pull together the heirarchy of the parent and child customers based on a passed custid, if the custparentid is null then it is a top level parent for example:

CustID         CustParentID
123             NULL
234             123
345             234
456             345
789             456

Now I may pass to a proc custif 345.   I want a resultset the best way I can get it to show the display order I am going to show the results of the parent and childs so maybe something returned such as:

CustID        RelationshipOrder      
123            1
234            2
345            3
456            4
789            5

Can anyone help the best way I can do this, or a better way possibly?  

Thanks
0
Comment
Question by:sbornstein2
  • 7
  • 3
10 Comments
 
LVL 60

Accepted Solution

by:
chapmandew earned 500 total points
ID: 24101676
here is one way to do it:

with mycte(custid, custparentid, ordering)
as
(
select custid, custparentid, 1
from #temp
where custparentid is null
union all
select t.custid, t.custparentid , ordering + 1
from #temp t
join mycte c on t.custparentid = c.custid
)

select custid,*  from mycte o
where exists(select 1 from mycte i where custid = 234)
0
 
LVL 60

Expert Comment

by:chapmandew
ID: 24101680
here's the data I loaded:

create table #temp(custid int, custparentid int)

insert into #temp
select 123     ,        NULL
union all
select 234      ,       123
union all
select 345     ,        234
union all
select 456     ,        345
union all
select 789     ,        456
0
 

Author Comment

by:sbornstein2
ID: 24106341
can't this somehow be done in one query or a nested query?  I am testing this now
0
 

Author Comment

by:sbornstein2
ID: 24106346
this is perfect though and works great, thank you.
0
 
LVL 60

Expert Comment

by:chapmandew
ID: 24106366
glad to help!
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:sbornstein2
ID: 24106471
actually this won't work only in a perfect situation.  Here is what I had in my test table now.

PartyID          PartyName                        PartyParentID
1      Company ABC      NULL
2      Company DEF      1
3      Company GHI      2
4      Company JKL      3
5      Company MNO      4
6      Jack in the Box 2      7
7      Jack in the Box 1      NULL
8      Jack in the Box 3      1
9      Jack in the Box 4      8
10      Jack in the Box 5      8

You can see now there can be more than one child flowing into a parent or another child for that matter.  So here was my results when passing in 3 as the partyid:

PartyID          PartyName                         PartyParentID   Ordering
1      Company ABC      NULL      1
7      Jack in the Box 1      NULL      1
6      Jack in the Box 2      7      2
2      Company DEF      1      2
8      Jack in the Box 3      1      2
9      Jack in the Box 4      8      3
10      Jack in the Box 5      8      3
3      Company GHI      2      3
4      Company JKL      3      4
5      Company MNO      4      5
0
 

Author Comment

by:sbornstein2
ID: 24106489
i would only want to show the flow up to the parent if I passed in partyid 3, right now this shows all the records.

with mycte(PartyID, OrgName, MacNum, PartyParentID, ordering)
as
(
select PartyID, OrgName, MacNum, PartyParentID, 1
from Organization
where PartyParentID is null
union all
select t.PartyID, t.OrgName, t.MacNum, t.PartyParentID,
       ordering + 1
from Organization t
join mycte c on t.PartyParentID = c.PartyID
)

select PartyID,*  from mycte o
where exists(select 1 from mycte i where PartyID = 3)
0
 

Author Comment

by:sbornstein2
ID: 24106494
ignore the macnum field in that above
0
 

Author Comment

by:sbornstein2
ID: 24106507
one thing is I am not sure what ordering would be right if more than one company had the same parent.  I need to find that out.
0
 

Author Comment

by:sbornstein2
ID: 24106671
i guess for now is there a way to do this and just order them based on the order of the partyid ascending I guess if there is more than one with the same parent?  Just a thought
0

Featured Post

Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

Join & Write a Comment

Data architecture is an important aspect in Software as a Service (SaaS) delivery model. This article is a study on the database of a single-tenant application that could be extended to support multiple tenants. The application is web-based develope…
Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

744 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now