2016-10-25 2 views
-1

Ich habe eine Tabelle mit den Spalten: ParentID, UnitName und OrganizationLevelID. UnitName ist der Name Konto wenn OrganizationLevelID=1 und es ist der Name einer Website, wenn OrganizationLevelID=2. Ich versuche, die Site abzufragen und dann basierend auf den ParentIDs dieser Site das Konto abzufragen. Ich habe versucht, die folgende Unterabfrage zu verwenden, aber es gibt nur NULL in der Kontospalte zurück.Wie man eine Abfrage requery t-sql

Meine aktuelle Abfrage:

SELECT t1.ParentID, 
      t1.UnitName, 
      (SELECT t2.UnitName 
      FROM Organization t2 
      WHERE t2.ParentID=t1.ParentID 
      AND t2.OrganizationLevelID=1) 
    FROM Organization t1 
    WHERE OrganizationLevelID=2; 

Erwartete Ausgabe:

enter image description here

+0

Vielleicht eine rekursive cte? Es ist schwer zu sagen, weil wir keine Ahnung haben, was Ihre Tabellenstruktur ist oder was Sie tun möchten. –

+0

Gibt es einen Datensatz vorhanden für WHERE t2.ParentID = t1.ParentID UND t2.OrganizationLevelID = 1 ' –

+2

Könnten Sie einige Beispieldatensätze enthalten, und zeigen uns die Ausgabe, die Sie von dieser Probe erwarten würde? –

Antwort

1

Sie bekommen null, weil in Ihrer äußeren Abfrage WHERE OrganizationLevelID=2 Zustand die Datenfilterung, die nur die ParentID gibt nur Seiten so Ihre Abfrage wird Sie müssen WHERE OrganizationLevelID=2 von Ihnen entfernen r Abfrage

+0

Das macht Sinn. Wären Sie in der Lage, ein Beispiel dafür zu geben, wie diese Abfrage aussehen würde, da ich sowohl die Site- als auch die Account-Spalte zurückgeben muss. –

0

Ist diese Hilfe:

CREATE TABLE #Orgs (ParentId INT, UnitName NVARCHAR(20), OrgLevelId INT) 

INSERT INTO #Orgs (ParentId , UnitName , OrgLevelId) 
     SELECT 1 , 'Acc Name' , 1 
     UNION ALL 
     SELECT 1 , 'SITE 1' , 2 
     UNION ALL 
     SELECT 1 , 'SITE 2' , 2 
     UNION ALL 
     SELECT 1 , 'SITE 3' , 2 

SELECT t1.ParentId , 
     t1.UnitName , 
     t2.UnitName AS SiteName 
FROM #Orgs t1 
     -- joins to self but with org level = 2 
     INNER JOIN #Orgs t2 ON t2.ParentId = t1.ParentId 
           AND t2.OrgLevelId = 2 
WHERE t1.OrgLevelId = 1; 

DROP TABLE #Orgs 

Returns:

ParentID UnitName SiteName 
1   Acc Name SITE 1 
1   Acc Name SITE 2 
1   Acc Name SITE 3 

Hinweis: Nur mit 2 Ebenen funktioniert, haben Sie nicht erwähnt, ob es irgendwelche mehr Ebenen als 2.