Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在没有GROUPBY子句的情况下按用户分区_Sql_Sql Server_Tsql_Group By_Partition By - Fatal编程技术网

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)