I have data in following format.
Table 1
e_id e_name e_type
-------------------------
1 CBC 2
2 ABC 3
3 N2 1
4 CBC1 3
5 ABC1 3
6 N1 1
Table 2
N_ID N_Name
---------------
3 N2
6 N1
Table 3
N_ID E_ID
------------
3 1
3 2
3 3
6 4
6 5
6 6
And I want to build a hierarchy as follows.
e_id e_name e_type n_id
------------------------------------
6 N1 1 6
4 - ABC1 3 6
5 - CBC1 3 6
3 N2 1 3
4 - ABC 3 3
5 - CBC 2 3
With Order by Nodes (ascending), child nodes (ascending).
I tried doing something similar to this,
SELECT u.e_id,
CASE WHEN e_TYPE_ID = 1 THEN u.e_name ELSE ' - ' + u.e_name END e_name,
e_TYPE_ID, su.n_ID
FROM table1 u
INNER JOIN table3 su on u.e_id = su.e_id
WHERE EXISTS (SELECT N_ID FROM table2 WHERE N_ID = CASE WHEN u.e_TYPE_ID = 1 THEN u.e_id ELSE n_ID END)
ORDER BY e_TYPE_ID, u.e_name,n_id
But I am not able to get the correct order, is there a better way to do this?
I will set you on the right path, you will need a CTE (common table expression) to accomplish this task:
[Update]
Why do you need those spaghetti tables anyway? Why don't you keep everything in one or two tables?
If you're using SQL Server 2008 (or 2008 R2), I would suggest using Hierarchy IDs as shown in Model Your Data Hierarchies With SQL Server 2008.
Use:
I tested using: