joshgeake
asked on
MS SQL - How do I fetch the same column twice from one table?
Hi,
I have two tables. One has a full list of IDs with their descriptions, the other lists the relationship between the IDs. I realise this sounds a little cryptic so I'll try and illustrate it in the code section.
What I need to do is have a full list of IDs with their parent and child descriptions...see desired result table in the coding section.
I have two tables. One has a full list of IDs with their descriptions, the other lists the relationship between the IDs. I realise this sounds a little cryptic so I'll try and illustrate it in the code section.
What I need to do is have a full list of IDs with their parent and child descriptions...see desired result table in the coding section.
Table 1:
ID Descr
1 James
2 Philip
3 Peter
4 Allan
Table 2:
ID ChildID
1 2
1 3
2 NULL
3 4
4 NULL
Desired Result:
ID ParentDescr ChildDescr
1 James Philip
1 James Peter
2 Philip NULL
3 Peter Allan
4 Allan NULL
ASKER
thanks, my issue was how to query the same table twice for the descriptions of the child and parent IDs but it looks like this sorts it - i'll comment tomorrow when i'm back in the office.
thanks again!
thanks again!
Select c.ID, C.Desc ParentDescr, m.ChildID, m.Descr as ChildDescr
From Table1 c INNER JOIN (
Select a.ID, a.ChildID, t.Descr
From Table1 t INNER JOIN Table2 d
ON t.ID = ChildID
Where ChildID IS NOT NULL) as m
ON c.ID = m.Id
From Table1 c INNER JOIN (
Select a.ID, a.ChildID, t.Descr
From Table1 t INNER JOIN Table2 d
ON t.ID = ChildID
Where ChildID IS NOT NULL) as m
ON c.ID = m.Id
I am really slow today... :-)
Alternatively...Something like this should work...
select ALL.*
from
(
select A.id, A.Descr as ParentDescr, C.Descr as ChildDescr from table1 A inner join table2 B on A.id = B.id inner join table1 C on B.ChildID = C.id where B.ChildID is not null
union all
select A.id, A.Descr, NULL from table1 A inner join table2 B on A.id = B.id where B.ChildID is null
) ALL
order by ALL.id
HTH
ASKER
Right i'm still a little stuck, see the code snippet...
It looks like its listing all part groups for every product when what I want it to do is only list its relevent group. Each part can be in a number of product groups but it's usually 1. Thus it will then list the child group.
Any ideas?
It looks like its listing all part groups for every product when what I want it to do is only list its relevent group. Each part can be in a number of product groups but it's usually 1. Thus it will then list the child group.
Any ideas?
SELECT epar.part AS PartCode, p.prod_group, c.prod_group AS child_group, p.descr AS ParentDescr, c.descr AS ChildDescr
FROM epar LEFT OUTER JOIN
wgrp_part ON epar.part = wgrp_part.part INNER JOIN
wgrp AS p ON wgrp_part.prod_group = p.prod_group INNER JOIN
wgrp_sgrp AS pc ON pc.Prod_group = p.prod_group LEFT OUTER JOIN
wgrp AS c ON pc.sub_group = c.prod_group
WHERE (c.descr IS NOT NULL)
ORDER BY epar.part
ASKER
by the way...
epar - lists all parts.
wgrp_part - lists all parts and their prod_groups.
wgrp_sgrp - lists all sub_groups and their respective prod_group.
wgrp - lists all prod_groups and sub_groups descriptions.
epar - lists all parts.
wgrp_part - lists all parts and their prod_groups.
wgrp_sgrp - lists all sub_groups and their respective prod_group.
wgrp - lists all prod_groups and sub_groups descriptions.
Sorry, but I am a little confused. Can you please post some sample data from the tables we can work with?
P.
P.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I would recommend accepting mvisa's answer since it was answered based on what was requested.
P.
P.
Open in new window