2016-08-12 2 views
-2

Kann jemand diesen Code für mich erklären? Es gibt die Differenz zwischen jedem Moderator (PNRFNAME) Gehalt (Salary_yearly)Erklärung SQL Server-Code

SELECT P2.PNRFNAME ,P1.PNRFNAME AS "pnrfname" , P2.SALARY_YEARLY - P1.SALARY_YEARLY AS "salary difference" 
FROM PRESENTERS P2 
JOIN PRESENTERS P1 
ON P2.PNRFNAME < P1.PNRFNAME 

ORDER BY P1.SALARY_YEARLY DESC

this are the results

Dies ist die Tabelle dafür:

INSERT INTO PRESENTERS(PRESENTERID, PNRLNAME, PNRFNAME, AGE,YEARS, SALARY_YEARLY) 
VALUES 
+4

Was macht Tiff für einen Lebensunterhalt? Wenn sein Gehalt 35 Millionen pro Jahr beträgt, möchte ich diesen Job. – dfundako

+2

Diese Verknüpfung ist eine sogenannte Dreiecksverbindung. Die Leistung kann schwierig sein, aber in diesem Fall scheint es, was gewünscht wird. Sie können hier mehr über Dreiecksverbindungen lesen. http://www.sqlservercentral.com/articles/T-SQL/61539/ –

Antwort

1

Er bildet jeden Moderator mit jedem Moderator ab und teilt Ihnen mit, wie unterschiedlich die Gehälter sind. Es verwendet einen Self-Join, um Präsentatoren miteinander zu verknüpfen.

Die ON P2.PNRFNAME < P1.PNRFNAME Join-Bedingung ist vielleicht ungewöhnlich, aber es funktioniert. Dieser Join stellt sicher, dass Sie keine symmetrischen Vergleiche wie Jason vs Tiff und Tiff vs Jason in separaten Zeilen erhalten. Dies liegt daran, dass bei zwei gegebenen Namen beide nicht gleich sind, aber nur einer von ihnen der erste in alphanumerischer Reihenfolge ist. Wenn Sie die Klausel NOT P2.PNRFNAME = P1.PNRFNAME verwenden würden, würden Sie die Jason vs Tiff und Tiff vs Jason Verdoppelung erhalten, die ich erwähnte.