2014-06-27 84 views
0

我有一個插入查詢我目前正在使用存儲過程,它應該如此。它如下:SQL RANK()計算

insert into tblAgentRank (AgtID, RankType, Rank, TimeFrame, RankValue) 
select AgtID, 8, RANK() OVER (order by SUM(ColPrem*ModeValue) DESC) as Rank, 'Y', SUM(ColPrem*ModeValue) 
from tblAppsInfo 
where CompanyID in (select CompanyID from tblCompanyInfo 
    where DeptID = 7) 
group by AgtID 
order by Rank 

這會爲每個代理創建一個總計,並將它們與他們的同行進行排名。


我需要創建一個類似的語句,做了以下計算:

  • 如果PolicyTypeID = 4,計算SUM(ColPrem * ModeValue)* 0.07
  • 否則,計算SUM((ColPrem * ModeValue)+(ExcessPrem * 0.07))
  • 總結這兩個陳述在一起爲每個代理人,然後做總的排名。

我可以很容易地做到這一點之一,如第一個查詢所示。我的心理障礙源自需要根據PolicyTypeID根據具體情況進行。

+2

您正在使用哪些DBMS? –

+0

對不起,忘了提。 SQL 2005. – niclake

回答

3

我覺得這select語句做你想要的計算:

select AgtID, 8, 
     RANK() OVER (order by SUM(case when PolicyTypeID = 4 then ColPrem*ModeValue * 0.07 
             else ColPrem*ModeValue + ExcessPrem * 0.07 
           end) as RANK2, 

     SUM(case when PolicyTypeID = 4 then ColPrem*ModeValue * 0.07 
       else ColPrem*ModeValue + ExcessPrem * 0.07 
      end) 
from tblAppsInfo 
where CompanyID in (select CompanyID from tblCompanyInfo where DeptID = 7) 
group by AgtID 
order by Rank; 
+0

幾個拼寫錯誤,但這解決了我的問題。謝謝。 – niclake

1

你只需要使用金額內case語句。

CASE WHEN PolicyTypeID = 4 THEN SUM(ColPrem*ModeValue) * 0.07 
ELSE SUM((ColPrem*ModeValue) + (ExcessPrem * 0.07)) END 
+0

我選擇另一個作爲答案,因爲它更完整,但這也是正確的。謝謝! – niclake

1

而不是做一切的一起,你可以分而治之:在CTE創建一個基本的語句,並在主查詢

WITH PT AS (
    SELECT AgtID 
     , RankType = 8 
     , RankValue4 = SUM(CASE WHEN PolicyTypeID = 4 
           THEN ColPrem*ModeValue 
           ELSE 0 
          END) * 0.07 
     , RankValue = SUM(CASE WHEN PolicyTypeID = 4 
           THEN 0 
           ELSE (ColPrem*ModeValue) + (ExcessPrem * 0.07) 
         END) 
    FROM tblAppsInfo 
    WHERE CompanyID in (SELECT CompanyID 
         FROM tblCompanyInfo 
         WHERE DeptID = 7) 
    GROUP BY AgtID 
) 
INSERT INTO tblAgentRank (AgtID, RankType, Rank, TimeFrame, RankValue) 
SELECT AgtID, RankType 
    , RANK() OVER (ORDER BY RankValue4 + RankValue DESC) as Rank 
    , 'Y', RankValue4 + RankValue 
FROM PT 

這一點我不清楚,如果第一部分使用下式:

如果PolicyTypeID = 4,計算SUM(ColPrem * ModeValue)* 0.07

這真的是SUM(ColPrem*ModeValue) * 0.07或它的SUM((ColPrem*ModeValue) * 0.07),我實現了前者,將實現更改爲第二種形式,只需在CASE內部移動乘法運算即可。

+0

這也適用。我認爲,在這種情況下,7%可以以任何一種方式計算。感謝您的輸入! – niclake