2016-08-24 9 views
0

Ich bin immer noch neu bei SQL Server und ich brauche Hilfe bei dieser Frage.SQL Server Den Unterschied zwischen den Zeilen finden

Ich brauche eine Ausgabe wie folgt zu erzeugen:

PNRFNAME | PNRFNAME | Salary_Difference 
---------+----------+------------------ 
Jason | Vicki |  483778.43 
Jason | Tiff  | -34540999.72 
Vicki | Tiff  | -35024778.15 

Die Tabelle, die ich zur Zeit mit diesen Daten gefüllt habe, ist:

PresenterID | PnrLName   | PnrFName | age | years | Salary_Yearly 
------------+------------------+----------+-----+-------+-------------- 
EMP_01  | NEEDELL   | Tiff  | 61 | 10 | 37451000.70 
EMP_02  | BUTLER-HENDERSON | Vicki | 41 | 10 | 2426222.55 
EMP_03  | PLATO   | Jason | 45 | 8 | 2910000.98 

Der Code, den ich bisher habe:

SELECT 
    a.Pnr_FName, b.Pnr_FName, 
    CONCAT((a.Salary_Yearly - b.Salary_Yearly), (a.Salary_Yearly - a.Salary_Yearly)) AS Salary_Difference 
FROM 
    PRESENTERS b 
CROSS JOIN 
    PRESENTERS a 

Hoffe das macht Sinn! Ich versuchte, meine Frage klar

+0

Forschung LEAD und LAG, wenn Sie einen Wert mit der vorherigen oder späteren Zeile vergleichen möchten, wenn Sie SQL 2012 haben – scsimon

+0

Mögliche Duplikate von [SQL Server: vergleichen Gehalt von Personen in der gleichen Tabelle und beide Namen anzeigen, mit dem Unterschied ] (http://stackoverflow.com/questions/39129803/sql-server-compare-salary-of-people-in-the-same-table-and-display-both-names) –

Antwort

0

Versuchen, dies zu machen:

CREATE TABLE #PRESENTERS(PRESENTERID VARCHAR(20), PNRLNAME VARCHAR(25), PNRFNAME VARCHAR(25), AGE INT, YEAR INT , SALARY_YEARLY NUMERIC(11,2)) 

INSERT INTO #PRESENTERS 

SELECT 'EMP_01','NEEDELL','TIFF',61,10,37451000.7   UNION ALL 
SELECT 'EMP_02','BUTLER-HENDERSON','VICKI',41,10,2426222.55 UNION ALL 
SELECT 'EMP_03','PLATO','JASON',45,8,2910000.98 

;WITH A 
AS 
(
SELECT ROW_NUMBER() OVER (ORDER BY PRESENTERID DESC) RN, * 
FROM #PRESENTERS 
) 
SELECT A.PNRFNAME , A2.PNRFNAME, A.SALARY_YEARLY - A2.SALARY_YEARLY SALARY_DIFF 
FROM A 
INNER JOIN A A2 ON A.RN < A2.RN 
0

Sie führen verwenden Verzögerung zu bekommen oder diese: Verwenden Sie die folgende Abfrage,

;with cte as (
select pnrfname, Salary_yearly, lag(salary_yearly) over (order by presenterid) lag_sal, 
lag(pnrfname) over (order by presenterid) as lag_fname from #PRESENTERS 
) select pnrfname, lag_fname, salary_yearly-lag_sal from cte 

Ist das Ihre Anforderung löst?

Verwandte Themen