如何根据组中最上面的行进行计算
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
请考虑这个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