簡體   English   中英

如何在沒有 GROUP BY 子句的情況下使用 PARTITION BY

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM