我有一张表,在满足某个条件时,我需要从中总结表中的值。在Where子句中使用If/CASE语句
这是我从查询初始表:
Worksheet Label LOB Data
-----------------------------------------
Layers AAL EQ-AO-US 64726.02706
Layers AAL EQ-CA 171683.6675
Layers AAL EQ-Int-M 858.9752352
Layers AAL EQ-NM 9225.104696
Layers AAL EQ-PNW 12554.17653
Layers AAL NWS-Int-M 63142.0387
Layers AAL NWS-US 300230.9489
P&L AdjAAL EQ-AO-US 32363.01353
P&L AdjAAL EQ-CA 251180.82
P&L AdjAAL EQ-NM 4612.552348
P&L AdjAAL EQ-PNW 6277.088264
P&L AdjAAL NWS-Int-M 31571.01935
P&L AdjAAL NWS-US 132993.08
我需要的总和上市LOB的数据查询和调出最后的总和。首先,我需要检查一个LOB是否存在AdjAAL,如果是,那就使用那个。否则,我需要使用AAL“模型化”值特定LOB
MS SQL查询
select FileID,
Sum(cast(Data as float)) as Modeled
from Premium_DATA
where Label in ('AdjAAL','AAL') and LOB in ('NWS-US',
'NWS-Int-M',
'EQ-CA',
'EQ-NM',
'EQ-PNW',
'EQ-AO-US',
'EQ-Int-M',
'StormSurge-US')
and FileID = 17719
group by FileID
上面的查询加起来一切从LOB表,并给出了不正确的值作为1081418.51206399。但我期望最终答案是459856.5487。 (我从上表中加入下面的数字得到这个数字)
AdjAAL 32363.01353
AdjAAL 251180.82
AdjAAL 4612.552348
AdjAAL 6277.088264
AdjAAL 31571.01935
AdjAAL 132993.08
AAL 858.9752352
对如何处理在where子句,甚至是更好的方法来获取最终的正确答案用如果/ case语句的这种情况下,任何想法。
一样的,所以如果一个'LOB'有两个'labels'使用'AdjAAL'第一? –
你的rdbms是什么? –
其MS SQL查询 – Mike