Avatar billede mickros Nybegynder
08. juni 2004 - 12:11 Der er 13 kommentarer og
1 løsning

Hirakisk data

jeg skal lave et udtræk af date med til en hirakisk liste med flere parents

jeg f.eks. følgende data:
A_ID    B_ID    Type
1    1    1
1    2    1
1    3    1
2    1    2
3    2    2
4    3    2
4    4    1
4    5    1
5    4    2
5    6    1
6    5    2
7    6    2

Hvor
A_ID er Enheds ID
B_ID er Sammenkædningens ID
Type er Parent(1)/Chield(2)

og det udtræk jeg skal bruge er noget lingende:
ID_1    ID_2    ID_3    ID_4
1    2       
1    3       
1    4       
1    4    5   
1    4    5    7
1    4    6
Avatar billede jensen363 Forsker
08. juni 2004 - 12:18 #1
Det lyder som noget med PIVOT tabeller ... identificér lige ID_1, ID_2 ....
Avatar billede terry Ekspert
08. juni 2004 - 12:18 #2
Is there a fixed number of children (childrens children) ?
If not then the only way I know of is by doing it in code with a recursive call down the tree, at the same time making a new table adding a column for each level.
Avatar billede mickros Nybegynder
08. juni 2004 - 12:30 #3
Sory
ID_1 - 4 skulle svare til A_ID og nummeret angive bare level
Avatar billede mickros Nybegynder
08. juni 2004 - 12:35 #4
tarry: Nej men der er et max antal så det kunne måske løses med en UNION
Avatar billede jensen363 Forsker
08. juni 2004 - 12:44 #5
TRANSFORM Sum(Tabel1.Type) AS SumOfType
SELECT Tabel1.B_ID
FROM Tabel1
GROUP BY Tabel1.B_ID
PIVOT Tabel1.A_ID;
Avatar billede terry Ekspert
08. juni 2004 - 13:24 #6
I must be very tired today, just done seem to understand how  the parent/child records are related!
Can you explain how records are related please.
Avatar billede mickros Nybegynder
08. juni 2004 - 14:37 #7
jeg skal forsøge at give et billede af herakiet

Level
1    2    3    4
---------------------
1 --- 2
  |-- 3
  |-- 4 --- 5 --- 7
        |-- 6
Avatar billede terry Ekspert
08. juni 2004 - 20:59 #8
Can you exaplain HOW you get the data (in your example) into "herakiet"?

Give an example of the data, and the result you expect. Then explain HOW you got to that result, one step at a time.
Avatar billede mickros Nybegynder
09. juni 2004 - 11:17 #9
Okey jeg prøver at forklare.

de data'er jag har er en del af en DB vi bruger til at holde styr på et WAN netværk
A_ID i eksemplet svare til en Router
B_ID svare til en Linje

netwærket har opbygning efter træ strukturen i de yderste ender
se billede http://www.jaros.dk/tmp/Network.png

dataerne er som følger
A_ID        B_ID    Type
Router 1    1    1   
Router 2    1    1   
Router 5    1    2   
Router 1    2    1   
Router 2    2    1   
Router 3    2    2   
Router 1    3    1   
Router 2    3    1   
Router 4    3    2   
Router 3    4    1   
Router 6    4    2   
Router 3    5    1   
Router 7    5    2   
Router 4    6    1   
Router 8    6    2   
Router 6    7    1
Router 9    7    2

med en relation fra A_ID til en Router tabel med mere info om routeren
og en relation fra B_ID til en Linje tabel med mere info linjen

denne opbygning er nodvendig da netwærkes opbygning skal kunne afspejles i DB.
dog kan data der ikke er relevante i denne sammenhæng fra soteres.

jeg ønsker at kunne lave en report der ser nogen lunde ude som på dette billede
http://www.jaros.dk/tmp/Report.png

evt. kan Router 1/Router 2 køres sammen til 1
Avatar billede jensen363 Forsker
09. juni 2004 - 11:37 #10
Ikke nogen link som virker !!!
Avatar billede mickros Nybegynder
09. juni 2004 - 12:28 #11
Prøv igen
Jeg har omdøbt filerne (Serveren var case sentative)
Avatar billede jensen363 Forsker
09. juni 2004 - 17:16 #12
Forklar lige, hvad Report.png illustrerer ??? ... kan ikke lige se sammenhængen til dine kildedata ...
Avatar billede mickros Nybegynder
09. juni 2004 - 18:00 #13
Reporten skule gerne vise hvilke routere der sider bagpå hvilke. f.eks som det ses på http://www.jaros.dk/tmp/Network.png
så sider Router 3 bagpå Router 1 og 2
samtidig sider Router 6 bagpå Router 3 osv.
Avatar billede mickros Nybegynder
18. juni 2004 - 09:12 #14
Jeg har selv fundet en løsning som fungere for mig.

SELECT DISTINCT TABEL1.A_ID, TABEL2.A_ID, TABEL3.A_ID, TABEL4.A_ID
FROM ((((TABEL AS TABEL1 LEFT JOIN (TABEL AS TABEL1R LEFT JOIN TABEL AS TABEL2 ON TABEL1R.B_ID = TABEL2.B_ID) ON TABEL1.A_ID = TABEL1R.A_ID) LEFT JOIN TABEL AS TABEL2R ON TABEL2.A_ID = TABEL2R.A_ID) LEFT JOIN TABEL AS TABEL3 ON TABEL2R.B_ID = TABEL3.B_ID) LEFT JOIN TABEL AS TABEL3R ON TABEL3.A_ID = TABEL3R.A_ID) LEFT JOIN TABEL AS TABEL4 ON TABEL3R.B_ID = TABEL4.B_ID
WHERE TABEL1R.Type=1 AND TABEL2.Type=2 AND TABEL2R.Type=1 AND TABEL3.Type=2 AND TABEL3R.Type=1 AND TABEL4.Type=2
UNION
SELECT DISTINCT TABEL1.A_ID, TABEL2.A_ID, TABEL3.A_ID,NULL
FROM ((TABEL AS TABEL1 LEFT JOIN (TABEL AS TABEL1R LEFT JOIN TABEL AS TABEL2 ON TABEL1R.B_ID = TABEL2.B_ID) ON TABEL1.A_ID = TABEL1R.A_ID) LEFT JOIN TABEL AS TABEL2R ON TABEL2.A_ID = TABEL2R.A_ID) LEFT JOIN TABEL AS TABEL3 ON TABEL2R.B_ID = TABEL3.B_ID
WHERE TABEL1R.Type=1 AND TABEL2.Type=2 AND TABEL2R.Type=1 AND TABEL3.Type=2
UNION
SELECT DISTINCT TABEL1.A_ID, TABEL2.A_ID,NULL,NULL
FROM TABEL AS TABEL1 LEFT JOIN (TABEL AS TABEL1R LEFT JOIN TABEL AS TABEL2 ON TABEL1R.B_ID = TABEL2.B_ID) ON TABEL1.A_ID = TABEL1R.A_ID
WHERE TABEL1R.Type=1 AND TABEL2.Type=2
UNION SELECT DISTINCT TABEL1.A_ID,NULL,NULL,NULL
FROM TABEL AS TABEL1;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester