簡體   English   中英

在Where子句中使用If / CASE語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM