2016-04-28 175 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 

我要工资的一定比例列(工资/ TotalSalary)* 100百分比

我都试过,但它总是给0

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

我甚至不能应用乘法运算。查询100。

Incorrect syntax near the keyword 'Over'. 
+0

'为了通过Id'错过了'在()''的[薪水] /总和(工资)在()'里面 – Arulkumar

+0

改变你在()来匹配running_total - OVER(ORDER由Id) –

回答

1

给出了在将乘法错误,因为该部门将总是导致小于1你wouldnot乘看到他们,除非你通过100.0。你也应该使用​​3210来处理null的值。

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]