我有一个插件查询,我目前正在使用的存储过程中使用它。它如下:
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逐案进行。
答案 0 :(得分: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;
答案 1 :(得分:1)
你只需要在总和中使用case语句。
CASE WHEN PolicyTypeID = 4 THEN SUM(ColPrem*ModeValue) * 0.07
ELSE SUM((ColPrem*ModeValue) + (ExcessPrem * 0.07)) END
答案 2 :(得分: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
内的乘法