2016-04-28 11 views
0
ID Name  Age Salary running_total Percentage 
1 Abe  61  140000 140000    0 
2 Bob  34  44000 184000    0 
5 Chris 34  40000 224000    0 
7 Dan  41  52000 276000    0 
8 Ken  57  115000 391000    0 
11 Joe  38  NULL 391000    NULL 

Ich möchte Prozentsatz Spalte Gehalt als (Gehalt/TotalSalary) * 100.berechnen Prozentsatz des Gehalts von jedem Mitarbeiter

Ich habe dies versucht, aber es ist immer 0. geben

Select [ID] 
     ,[Name] 
     ,[Age] 
     ,[Salary], Sum(Salary) Over(order by Id) As running_total, [Salary]/Sum(Salary) Over() as Percentage 
    From [Company].[dbo].[SalesPerson] 

Ich bin sogar nicht in der Lage, eine Multiplikationsoperation anzuwenden. Abfrage gibt Fehler beim Anlegen der Multiplikation mit 100.

Incorrect syntax near the keyword 'Over'. 
+0

'Auftrag von Id' verpassten in dem' Over() '' das [Gehalt]/Sum (Gehalt) über() ' – Arulkumar

+0

Ihre über() ändern, um die running_total anzupassen - über (bestellen durch Id) –

Antwort

1

Da die Teilung immer in weniger als 1 führen würden Sie, wenn Sie vermehren sich durch 100.0 sehen wouldnot. Auch sollten Sie null Werte mit coalesce behandeln.

Select [ID] 
     ,[Name] 
     ,[Age] 
     ,[Salary], Sum(coalesce(Salary,0)) Over(order by Id) As running_total, 
     100.0*coalesce([Salary],0)/Sum(coalesce(Salary,0)) Over() as Percentage 
    From [Company].[dbo].[SalesPerson] 
1
Select [ID] 
     ,[Name] 
     ,[Age] 
     ,[Salary] 
     ,Sum(Salary) Over(order by Id) As running_total 
     ,CAST([Salary] as decimal(18,2)) * 100/Sum(Salary) Over() as Percentage 
    From [Company].[dbo].[SalesPerson] 
Verwandte Themen