[英]Using If/CASE statement in Where clause
我有一張表,當滿足特定條件時,我需要從中對這些值進行求和。
這是我要查詢的初始表:
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,如果存在,請使用該LOB。 否則,我需要為該特定LOB使用AAL“建模”值
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列表中的所有內容相加,並將THE INCORRECT值提供為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子句中使用If / case語句的方法的任何想法,甚至是更好的方法來檢索最終正確答案的想法。
使用row_number
僅選擇所需的標簽。
我在postgres中使用DEMO ,但在MSSQL上相同
SELECT * -- SUM("Modeled")
FROM ( SELECT *,
row_number() over (partition by "LOB" ORDER BY "Label" DESC) as rn
FROM Table1 t1
) as T
where t.rn =1
我不知道您使用的是哪個版本的SQL,在SQL Server上,您可以在聚合函數中使用CASE結構,例如
select sum(case when DOCID > 100 then 1 else 0 end) as DATA from DOCUMENTS
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.