Sql 如何在没有GROUPBY子句的情况下按用户分区
我有一个简单的查询,我需要汇总每个保单号的所有保费。 它给了我一个错误,因为我需要按Sql 如何在没有GROUPBY子句的情况下按用户分区,sql,sql-server,tsql,group-by,partition-by,Sql,Sql Server,Tsql,Group By,Partition By,我有一个简单的查询,我需要汇总每个保单号的所有保费。 它给了我一个错误,因为我需要按Premium对它进行分组。 有没有办法在不按“溢价”分组的情况下实现这一点 示例查询: declare @Test table (PolicyNumber varchar(50), Coverage varchar(50), Premium money) insert into @Test select 'Pol1' as PolicyNumber, 'Coverage1' as Coverage, 100
Premium
对它进行分组。
有没有办法在不按“溢价”分组的情况下实现这一点
示例查询:
declare @Test table (PolicyNumber varchar(50), Coverage varchar(50), Premium money)
insert into @Test
select 'Pol1' as PolicyNumber, 'Coverage1' as Coverage, 100 as Premium
UNION ALL select 'Pol1', 'Coverage2', 200
UNION ALL select 'Pol1', 'Coverage2', 25
UNION ALL select 'Pol1', 'Coverage3', 500
UNION ALL select 'Pol1', 'Coverage4', 300
UNION ALL select 'Pol1', 'Coverage4', 25
UNION ALL select 'Pol1', 'Coverage5', 150
select
PolicyNumber,
Coverage,
SUM(Premium) as Premium,
-- this gives an error
PremiumPerPolicy = SUM(Premium) OVER (Partition by PolicyNumber)
from @Test
group by PolicyNumber, Coverage
结果应该是这样的
PolicyNumber Coverage Premium PremiumPerPolicy
Pol1 Coverage1 100 1300
Pol1 Coverage2 225 1300
Pol1 Coverage3 500 1300
Pol1 Coverage4 325 1300
Pol1 Coverage5 150 1300
只需先预先计算分区和。我还假设可能有多个保单编号(同样,示例数据中没有显示)
您可以正常聚合值,然后使用窗口函数再次聚合
SUM(Premium) OVER (Partition by PolicyNumber)
变成
SUM(SUM(Premium)) OVER (Partition by PolicyNumber)
SUM(SUM(Premium)) OVER (Partition by PolicyNumber)