Verwenden von SqlServer 2014.Arbeiten an Adventureworks2014, nicht ordnungsgemäß beitreten
Unten ist mein guter und schlechter Code. Ich versuche, die HumanResources.Employee db abzufragen, und zwei Dinge damit, das letzte Bezahlupgrade in Bezahlen von der HumanResources.EmployeePayHistory in der Form von "neueste Datum", und die erste, mittlere und letzte Namen von die Person.Person-Datei.
Ich war in der Lage, die Mitarbeiterdaten abzufragen und die Namen erfolgreich aufzunehmen.
select b.*,(a.FirstName +' '+ isnull(a.MiddleName,'')+' '+a.LastName) as WHOLE_NAME
from Person.Person a
join HumanResources.Employee b
on a.BusinessEntityID = b.BusinessEntityID
konnte ich dann herausfinden, wie das richtige Datumsformat aus der Pay-History-Datei ...
Select Convert(VarChar(10),ModifiedDate,101) as Date
From HumanResources.EmployeeDepartmentHistory
Ich weiß zu bekommen, dass ich den MAX Datum für jedes Pay-Upgrade finden wie dieses:
Aber wenn ich versuche, drei Tabellen zu kombinieren, schmilzt mein Gehirn ziemlich und ich blase es weiter. Hier ist mein Chaos:
Select Convert(VarChar(10),c.ModifiedDate,101) as Date, b.*,(a.FirstName +' '+ isnull(a.MiddleName,'')+' '+a.LastName) as WHOLE_NAME
From Person.Person a inner join
HumanResources.Employee b on a.BusinessEntityID = b.BusinessEntityID
inner join
(Select BusinessEntityID, MAX(ModifiedDate) as MostRecent
From HumanResources.EmployeePayHistory
Group By BusinessEntityID)
HumanResources.EmployeePayHistory c
on c.businessEntityID = a.BusinessEntityID
Können Sie mir helfen, diesen letzten Drei-Tabellen-Beitritt Versuch zu beheben? Vielen Dank.
Dank ein Haufen Aaron. Seltsam. Die zweite innere Verbindung mit der Max-Funktion erhält also die "c" -Aufgabe außerhalb der Klammer in der unteren Zeile. Ok, das sehe ich. Ich muss über die Tatsache nachdenken, dass Sie es auf neuestes geändert haben, da ich zuerst dachte, dass die Verwendung von MostRecent in dieser unteren Auswahlanweisung es nicht unbedingt deklariert. – hitbid
@hitbid Kein Problem. Die Fachbegriffe für diesen 'JOIN' sind * geschachtelte Auswahl * und/oder * abgeleitete Tabelle *. Die wichtigste ist * abgeleitete Tabelle *, da Sie im Wesentlichen eine Tabelle für die äußere Abfrage erstellen, die referenziert werden soll. Daher werden alle Aliase, die Sie Spalten in Ihren abgeleiteten Tabellen angeben, als die tatsächlichen Spaltennamen in Ihrer äußeren Abfrage angesehen. –
@hitbid Eine andere Möglichkeit wäre, eine temporäre Tabelle aus Ihrer abgeleiteten Tabelle zu erstellen und dann die gesamte Verknüpfung durch 'INNER JOIN # TEMP t auf t.businessEntityID = a.BusinessEntityID' zu ersetzen. Nun, jede Spalte, die Sie aus '# TEMP' auswählen wollten, würden Sie anhand ihres Spaltennamens in' # TEMP' auswählen. Es ist dieselbe Logik, die mit der abgeleiteten Tabelle passiert, Sie tun das alles in einer Abfrage. –