聚合函数和 unpivot
Aggregate function along with unpivot
我正在使用在临时 table 上执行的 unpivot 函数,它给出的结果如下所示。
Select User, Grade, Experience FROM @TempTable
unpivot
(
[Experience] For [Grade] IN ([L1],[L2],[L3],[L4])
) unpiv;
输出
[User] [Grade] [Experience]
1 L1 2
1 L2 3
1 L3 1
1 L4 0
2 L1 1
2 L2 2
2 L3 0
2 L4 0
除了体验栏,我还想要百分比栏,它应该按用户分组。例如,如果我们考虑用户 1,对于 L1 等级,它将是 2/6 *100,对于 L2,它将是 3/6 * 100
有什么实现的建议吗?
它会像 Experience/Sum(Experience) * 100 但 SUM 应该按用户分组。
declare @TempTable table ([User] int, L1 int, L2 int, L3 int, L4 int);
insert into @TempTable([User], L1, L2, L3, L4)
values(1, 2, 3, 1, 0), (2, 1, 2, 0, 0);
Select [User], Grade, Experience, (Experience*100.0)/SUM(Experience) OVER(PARTITION BY [User])
FROM @TempTable
unpivot
(
[Experience] For [Grade] IN ([L1],[L2],[L3],[L4])
) unpiv;
我正在使用在临时 table 上执行的 unpivot 函数,它给出的结果如下所示。
Select User, Grade, Experience FROM @TempTable
unpivot
(
[Experience] For [Grade] IN ([L1],[L2],[L3],[L4])
) unpiv;
输出
[User] [Grade] [Experience]
1 L1 2
1 L2 3
1 L3 1
1 L4 0
2 L1 1
2 L2 2
2 L3 0
2 L4 0
除了体验栏,我还想要百分比栏,它应该按用户分组。例如,如果我们考虑用户 1,对于 L1 等级,它将是 2/6 *100,对于 L2,它将是 3/6 * 100
有什么实现的建议吗?
它会像 Experience/Sum(Experience) * 100 但 SUM 应该按用户分组。
declare @TempTable table ([User] int, L1 int, L2 int, L3 int, L4 int);
insert into @TempTable([User], L1, L2, L3, L4)
values(1, 2, 3, 1, 0), (2, 1, 2, 0, 0);
Select [User], Grade, Experience, (Experience*100.0)/SUM(Experience) OVER(PARTITION BY [User])
FROM @TempTable
unpivot
(
[Experience] For [Grade] IN ([L1],[L2],[L3],[L4])
) unpiv;