2015-05-18 65 views
0

假設我有一個大型查詢的一部分,如下所示,它返回一個結果集,其中包含具有不同值信息(PolPremium)的多行相同密鑰信息(PolNum)隨機順序。TSQL與結果集中多個值的第一個實例相匹配

是否可以選擇第一個匹配的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 
     } 

結果集

enter image description here

+0

對於第一次看到這個的人來說,它只是一個圖片和一些sql語句。這是什麼圖片?外部應用部分還是最終結果?添加一些您想查看的測試數據和結果。 –

+0

你可以用ROW_NUMBER來做到這一點。你需要確定你定義的「第一」。 –

+0

@GiorgiNakeuri我不明白你的意見。測試數據位於結果集圖像中,所需結果在測試中詳細說明,第1行結果,第2行結果和Total。問題的描述有什麼問題? –

回答

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。另外,我認爲排名最低的排名是第一排。你也許可以在外部應用部分過濾最上面一行,但是如果沒有一些樣本數據,我真的不清楚那裏發生了什麼。

+0

感謝您的回答。我能夠調整它滿足我的需求。 –

相關問題