分组和分区的复杂逻辑

时间:2018-11-14 15:02:42

标签: sql sql-server

我有下面脚本的表格。 我最终想要的数据显示在屏幕截图中。 要实现的逻辑是: 如果SUM(FPR_QTY)> QPA,请在不加总的情况下使用QPA。 否则,请使用FPR_QTY。

例如,对于前4行,TOT_FPR> QPA,所以我只需要1。 对于其余4行,TOT_FPR

如果我的解释不清楚,请让我知道。

    create table #TEMP
(QPA int
,FPR_QTY int
, key1 varchar(2)
, key2 varchar(10)
)

insert into #TEMP values
(1,1,'K1','kk1')
,(1,0,'k1','kk1')
,(1,1,'k1','kk1')
,(1,0,'k1','kk1')
,(50,5,'k2','kk1')
,(50,5,'k2','kk1')
,(50,5,'k2','kk1')
,(50,5,'k2','kk1')

select *
,SUM(FPR_QTY) OVER (PARTITION BY key1) AS TOT_FPR
from #TEMP

enter image description here

1 个答案:

答案 0 :(得分:0)

在这里您可以...我能够在两个选择中编写查询。我希望我能接受我自己的答案,因为它是最简单的方法,并且不会失败。

select * ,SUM(IIF(TOT_FPR>QPA,IIF(QPA_IND = 1,QPA,0),FPR_QTY)) OVER (PARTITION BY key2) FINAL
from
(
select *
,SUM(FPR_QTY) OVER (PARTITION BY key1) AS TOT_FPR
,ROW_NUMBER() OVER (PARTITION BY key1 order by QPA) AS QPA_IND
from #TEMP
)T