假设我有一个大型查询的一部分,如下所示,它以随机顺序返回具有不同值信息(PolPremium)的多行相同密钥信息(PolNum)的结果集。
是否可以选择第一个匹配的PolNum字段并总结PolPremium。在这种情况下,我知道有2个PolNumber被使用,因此给出了结果集的屏幕截图(是的,我知道它从14开始用于说明目的)并返回第一个值并对结果求和。
PolNum 000035789547的第一场比赛
(ROW 14)PolPremium - 32.00
PolNum 000035789547的第一场比赛
(ROW 16)PolPremium - 706043.00
总计应为32.00 + 706043.00 = 706072.00
查询
OUTER APPLY
(
SELECT PolNum, PolPremium
FROM PN20
WHERE PolNum IN(SELECT PolNum FROM SvcPlanPolicyView
WHERE SvcPlanPolicyView.ControlNum IN (SELECT val AS ServedCoverages FROM ufn_SplitMax(
(SELECT TOP 1 ServicedCoverages FROM SV91 WHERE SV91.AccountKey = 3113413), ';')))
ORDER BY PN20.PolEffDate DESC
}
结果集
答案 0 :(得分:0)
假设您的查询生成的最终结果为pic。然后你可以做类似的事情:
DECLARE @t TABLE
(
PolNum VARCHAR(20) ,
PolPremium MONEY
)
INSERT INTO @t
VALUES ( '000035789547', 32 ),
( '000035789547', 76 ),
( '000071709897', 706043.00 ),
( '000071709897', 1706043.00 )
SELECT t.PolNum ,
SUM(PolPremium) AS PolPremium
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY PolNum ORDER BY PolPremium ) AS rn
FROM @t
) t
WHERE rn = 1
GROUP BY GROUPING SETS(t.PolNum, ( ))
输出:
PolNum PolPremium
000035789547 32.00
000071709897 706043.00
NULL 706075.00
只需将@t
替换为您的查询即可。此外,我认为最低溢价的行是第一行。您可能会在外部应用部分中过滤顶行,但如果没有一些示例数据,我真的不清楚那里发生了什么。