如何根据组中的最顶行进行计算

时间:2017-07-27 10:27:39

标签: sql sql-server sql-server-2016

请考虑此表:

StuffCode        ClassCode         Value
----------------------------------------
AA001            00000             32561
AA001            00001             1232
AA001            00002             12312
AB002            00000             2112
AB002            00001             1234
AB002            00002             120
AC003            00000             6986
AC003            00001             1423
AC003            00002             658

我想创建这样的结果:

StuffCode        ClassCode         Percent
----------------------------------------
AA001            00000             100
AA001            00001             3.78
AA001            00002             37.81
AB002            00000             100
AB002            00001             58.42
AB002            00002             5.68
AC003            00000             100
AC003            00001             20.36
AC003            00002             9.41

Percent列根据每个记录的Value除以每个Class Code = 00000组中StuffCode的值来确定。例如

  

对于第2行:(1232/32561)* 100 = 3.78

     

对于第5行:(1234/2112)* 100 = 58.42

...

如何使用一个选择来完成此操作?

由于

2 个答案:

答案 0 :(得分:1)

您可以查询如下:

Select *, [Percent] = ([Value]*1.0/FIRST_VALUE([Value]) over(partition by StaffCode order by ClassCode))*100
    from #testdata

答案 1 :(得分:1)

使用Max() Over()

的一种方法
SELECT *,
       [Value] * 1.0 / Max(CASE
                       WHEN [ClassCode] = '00000' THEN [Value]
                     END) OVER(partition by StaffCode) * 100
FROM   Yourtable