Parent-Child rückwärts

Also ich habe ja

upload_2021-8-2_16-31-32.png

und möchte eine Spalte mit der ersten Reihe 1 und 4
eine zweite Spalte mit den 2,3,5
eine dritte Spalte mit 6

Pivot würde doch da nicht weiterhelfen?

Wäre es möglich den ersten Teil des Textes bis / ablesen, dann den zweiten Teil bis / usw. so dass man sich einzeln die Spalten aufbaut?
 
Werbung:
Code:
 id |  job  
----+-------
  1 | 1
  2 | 1/2
  3 | 1/3
  4 | 4
  5 | 4/5
  6 | 4/5/6
(6 rows)

edb=*# select id, job, substring(job,1,1) as job1, substring(job,3,1) as job2, substring(job,5,1) as job3, substring(job,7,1) as job4 from db_neuling ;
 id |  job  | job1 | job2 | job3 | job4
----+-------+------+------+------+------
  1 | 1     | 1    |      |      |
  2 | 1/2   | 1    | 2    |      |
  3 | 1/3   | 1    | 3    |      |
  4 | 4     | 4    |      |      |
  5 | 4/5   | 4    | 5    |      |
  6 | 4/5/6 | 4    | 5    | 6    |
(6 rows)

edb=*#

Das anzupassen an Deine DB überlasse ich Dir zur Übung. Das Problem bleibt: Du weißt am Anfang nicht, wie viele Spalten Du benötigst. Mögliche Lösung: via stored Proc dynamisch das SQL erzeugen und via EXECUTE ausführen.
 
Werbung:
Ah ok... Substring hilft mir leider doch nicht weiter. Meine Job Bezeichnungen sind Texte verschiedener Länge usw. Das wird deutlich komplizierter als erwartet. Lässt sich vielleicht folgende Abfrage so abändern, dass die Spalten schon in der rekursiven Abfrage angelegt werden?

CREATE TABLE #TEST
(
id int not null,
idparent int not null,
jobno int not null
);

INSERT INTO #Test VALUES
(1,0,1),
(2,1,2),
(3,1,3),
(4,0,4),
(5,4,5),
(6,5,6);

WITH CTE AS (
-- This is end of the recursion: Select items with no parent
SELECT id, idparent, jobno, CONVERT(VARCHAR(MAX),jobno) AS ListJob
FROM #Test
WHERE idParent = 0
UNION ALL
-- This is the recursive part: It joins to CTE
SELECT t.id, t.idparent, t.jobno, c.ListJob + '/' + CONVERT(VARCHAR(MAX),t.jobno) AS ListJob
FROM #Test t
INNER JOIN CTE c ON t.idParent = c.id
)
SELECT * FROM CTE
ORDER BY id;
 
Zurück
Oben