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

How to do calculation based on most top row in a group

请考虑这个Table:

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 列基于每个 StuffCode 组中 Class Code = 00000 的值对每个记录的 Value 进行划分。例如

For Row 2: (1232 / 32561) * 100 = 3.78

For Row 5: (1234 / 2112) * 100 = 58.42

...

如何用一个 select 做到这一点?

谢谢

您可以通过以下方式查询:

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

使用Max() Over()

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