none
Hierarchical Queries, CONNECT BY in SQL Server!!!! RRS feed

Antworten

  • Sehr geehrte Herren,

    Herzlichen Dank im Voraus für Ihre Unterstützung ;-) :-)

    Liebe Grüße,

    Rahmani


    rahmani
    • Als Antwort markiert rahm4t Donnerstag, 1. September 2011 15:19
    Donnerstag, 1. September 2011 15:19

Alle Antworten

  • Interessanter Versuch. Ab SQL Server 2005 geht das mittels Tabellenausdrücken (Common Table Expression, CTE).

    Donnerstag, 1. September 2011 08:47
    Moderator
  • 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

    Donnerstag, 1. September 2011 10:24
  • 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
    Donnerstag, 1. September 2011 11:17
    Moderator
  • Danke für das Beispile. Die Idee war schon einmal da, aber der Pfad war halt nicht richtig zusammengestellt.
    Aber jetzt schaut das Ergebnis sehr gut aus.

    Danke schön und liebe Grüße
    Rudi

     

    Donnerstag, 1. September 2011 14:40
  • Sehr geehrte Herren,

    Herzlichen Dank im Voraus für Ihre Unterstützung ;-) :-)

    Liebe Grüße,

    Rahmani


    rahmani
    • Als Antwort markiert rahm4t Donnerstag, 1. September 2011 15:19
    Donnerstag, 1. September 2011 15:19