Thomas stand ja kürzlich vor dem Problem, eine CTE hierarchisch korrekt ausgeben zu wollen, was ihn zu Niels Berglund führte (Sorting Hierarchical CTE's).
Allerdings blieb ein Problem: Die Daten sind nun zwar hierarchisch sortiert - nicht jedoch alphabetisch innerhalb der Hierarchie.
Heute stand ich schließlich vor dem gleichen Problem - und ich glaube, ich habe eine Lösung gefunden ;-)
Ausgehend von einer Tabelle Kategorien, welche die Felder Name (nvarchar), ID (uniqueidentifier) und Parent (uniqueidentifier) besitzt, sollen also die Kategorien hierarchisch und alphabetisch dargestellt werden:
Korrekt wäre also z.B.:
| Name |
ID |
Parent |
| Rohre und Formteile |
C55C8856-6205-4F76-A15A-6FCD4A68A831 |
00000000-0000-0000-0000-000000000000 |
| Geschweißte Rohre und Formteile |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
C55C8856-6205-4F76-A15A-6FCD4A68A831 |
| Rohrbögen geschweißt |
8A137449-6108-47D2-8ED0-AE0EA4176EB2 |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
| Rohre geschweißt |
085A0AA3-AB9D-4DD1-9739-77040E627445 |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
Erhalten habe ich mit Niels' Lösung jedoch nur:
| Name |
ID |
Parent |
| Rohre und Formteile |
C55C8856-6205-4F76-A15A-6FCD4A68A831 |
00000000-0000-0000-0000-000000000000 |
| Geschweißte Rohre und Formteile |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
C55C8856-6205-4F76-A15A-6FCD4A68A831 |
| Rohre geschweißt |
085A0AA3-AB9D-4DD1-9739-77040E627445 |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
| Rohrbögen geschweißt |
8A137449-6108-47D2-8ED0-AE0EA4176EB2 |
9EEE0951-4E63-4494-BB18-88BCC1D4A3E5 |
Nach einigem Experimentieren mit Views u.ä. bin ich auf folgende Lösung gekommen:
WITH CTE([Name], ID, ordercol, Parent)
AS
(
SELECT [Name], ID, cast([Name] as varbinary(100)) ordercol, Parent
FROM ProductCategory
WHERE Parent= '{00000000-0000-0000-0000-000000000000}'
UNION ALL
SELECT ProductCategory.[Name],
ProductCategory.ID,
cast(ordercol + CAST(ProductCategory.[Name] AS BINARY(4)) as varbinary(100)) ordercol,
ProductCategory.Parent
FROM ProductCategory INNER JOIN
CTE ON ProductCategory.Parent =
CTE.ID
)
SELECT [Name], ID, Parent
FROM CTE
ORDER BY ordercol, [Name]
Damit erhielt ich o.g. gewünschtes hierarchisch und alphabetisch korrekt sortiertes Resultat. Außerdem funktioniert jetzt sogar die Änderung von ORDER BY auf [Name] DESC.
Currently rated 1.3 by 54 people
- Currently 1.259259/5 Stars.
- 1
- 2
- 3
- 4
- 5