Benutzer mit den meisten Antworten
Hierarchical Queries, CONNECT BY in SQL Server!!!!

Frage
-
Sehr geehrte Herren,
Ich bin seit einigen Tagen mit dem Programmieren von Hierarchical Queries beschäftigt.
Was wären die Äquivalenzbefehle von SQl (Connect by) bei SQL Server?
Ich habe versucht, Connect_by.dll in SQL Server zu importieren, aber leider funktioniert dies nichtVielleich kennt jemand Neue Version von Connect_by.dll ? !!!!
http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/
Bsp.
Hierarchical Queries, CONNECT_BY in Oracle:
http://download.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.htm
Für jede Hilfe bin ich dankbar.
Mfg aus Wien
Rahmani
rahmani
Antworten
Alle Antworten
-
Interessanter Versuch. Ab SQL Server 2005 geht das mittels Tabellenausdrücken (Common Table Expression, CTE).
-
Interessanter Versuch. Ab SQL Server 2005 geht das mittels Tabellenausdrücken (Common Table Expression, CTE).
Leider löst das das Problem nicht. Es geht darum, dass in Oracle mit CONNECT BY (PRIOR) etc. die Struktur der Hierarchie so darstellt wird, wie sie tatsächlich ist. Mit CTE kann das in MS-SQL NICHT gemacht werden. In 2005 wurde dabei von einem User eine DLL entwickelt (C oder C++), die aber mit den aktuellen Windowsumgebungen nicht kompatibel ist.
Tatsächlich kommt das raus:
Leiter Abtl1
Gruppenleiter G1
Gruppenleiter G2
Mitarbeiter A
Mitarbeiter B
Mitarbeiter_x
Mitarbeiter_y
Mitarbeiter_z
Mitarbeiter_1
Mitarbeiter_2
Leiter Entwicklung E
Mitarbeiter_e1
Mitarbeiter_e2
Das wäre das Ziel:
Leiter Abtl1
Gruppenleiter G1
Mitarbeiter_1
Mitarbeiter_2
Gruppenleiter G2
Mitarbeiter_x
Mitarbeiter_y
Mitarbeiter_z
Leiter Entwicklung E
Mitarbeiter_e1
Mitarbeiter_e2
Mitarbeiter A
Mitarbeiter B
usw.
Freudliche Grüße
Rudi
-
Wie kommst du darauf? Natürlich geht das. Du musst halt dein Ergebnis einfach nach Pfad sortieren. Siehe das Beispiel zu dem Link von vorhin:
USE AdventureWorks2008R2 ; GO WITH DirectReports ( ManagerID, EmployeeID, Title, DeptID, LEVEL, Path ) AS ( -- Anchor member definition SELECT e.ManagerID , e.EmployeeID , e.Title , edh.DepartmentID , 0 , '//' + CAST(e.EmployeeID AS VARCHAR(MAX)) FROM dbo.MyEmployees AS e INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL WHERE ManagerID IS NULL UNION ALL -- Recursive member definition SELECT e.ManagerID , e.EmployeeID , e.Title , edh.DepartmentID , Level + 1 , Path + '/' + CAST(e.EmployeeID AS VARCHAR(MAX)) FROM dbo.MyEmployees AS e INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL INNER JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID ) -- Statement that executes the CTE SELECT ManagerID , EmployeeID , SPACE(LEVEL) + Title , DeptID , LEVEL , Path FROM DirectReports INNER JOIN HumanResources.Department AS dp ON DirectReports.DeptID = dp.DepartmentID WHERE dp.GroupName = N'Sales and Marketing' OR Level = 0 ORDER BY PATH ; GO
- Als Antwort vorgeschlagen Falk Krahl Freitag, 2. September 2011 19:19