[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 195
  • Last Modified:

SQL Server - Heirarchy Question

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
sbornstein2
Asked:
sbornstein2
  • 7
  • 3
1 Solution
 
chapmandewCommented:
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
 
chapmandewCommented:
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
 
sbornstein2Author Commented:
can't this somehow be done in one query or a nested query?  I am testing this now
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
sbornstein2Author Commented:
this is perfect though and works great, thank you.
0
 
chapmandewCommented:
glad to help!
0
 
sbornstein2Author Commented:
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
 
sbornstein2Author Commented:
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
 
sbornstein2Author Commented:
ignore the macnum field in that above
0
 
sbornstein2Author Commented:
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
 
sbornstein2Author Commented:
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 7
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now