[英]How to user PARTITION BY without GROUP BY clause
我有一個簡單的查詢,我需要總結每個保單編號的所有保費。 它給了我一個錯誤,因為我需要按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
您可以正常聚合您的值,然后使用 window function 再次聚合。
SUM(Premium) OVER (Partition by PolicyNumber)
變成
SUM(SUM(Premium)) OVER (Partition by PolicyNumber)
只需先預先計算您的分區總和。 我還假設它可能有多個保單編號(同樣未在您的示例數據中顯示)。
with cte as (
select
PolicyNumber
, Coverage
, Premium
, sum(Premium) over (partition by PolicyNumber) PremiumSum
from @Test
)
select PolicyNumber, Coverage, sum(premium), PremiumSum
from cte
group by PolicyNumber, Coverage, PremiumSum;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.