2016-09-28 75 views
3

這是我的我的表如何if語句情況下,使用SQL Server 2014

INSERT INTO Paiment (PaimentDate, Champs1, Champs2, Champs3) 
VALUES (2013, 90, 70, 60), (2011, 20, 30, 40), (2009, 50, 0, 60), 
     (2008, 60, 16, 60), (2007, 0, 36, 20), (2006, 30, 25, 63), 
     (2017, 10, 70, 40), (2019, 20, 30, 32), (2030, 50, 0, 63), 
     (2020, 60, 16, 22), (2018, 0, 36, 33), (2005, 30, 25, 17) 

entrydate是在2005年之前,使之champs1和champs2與paimentDate降低至2009年

否則entrydate大於或等於2005年,使冠軍金額1與paimentDate低於2003 +金額冠軍2與paimentDate低於2001

這是我的代碼,請任何人co幫助我。

select 
    (Case 
     when DateofEntry < 2011 AND PaimentDate < 2005 

      Then (IsNull(Champs1, 0) + IsNull(Champs2, 0) 
                Else (case when DateofEntry >= 2001 
       Then (
        (CASE WHEN PaimentDate < 2009 THEN ISNULL(Champs1.E1, 0) ELSE 0 END 

             + 

             CASE WHEN PaimentDate < 2011 THEN ISNULL(Champs2.E3, 0) ELSE 0 END) 
       ) 
      end) 

    End) 

這是我的代碼。問題是當paiementDate低於2005時,它必須使champs1 + champs2中的所有元素與paiment低於2005的總和,但是在此代碼中,即使paiment高於2005年,它也會得到所有champs1 + champs2的總和,並且那不是我正在尋找的。

任何幫助,請

+0

'CASE'在T-SQL是一個** **表達式計算結果爲**正好一個原子值** - 它不是一個聲明,可選地執行一個代碼分支或其他... –

回答

0

重新格式化你的SELECT語句

SELECT CASE WHEN entrydate < 2005 AND paimentDate < 2009 
        THEN ISNULL(Champs1, 0) + ISNULL(Champs2, 0) 
        WHEN entrydate >= 2005 
        THEN ( 
          CASE WHEN paimentDate < 2003 AND paimentDate > 2001 THEN ISNULL(Champs1, 0) END 
          + 
          CASE WHEN paimentDate <= 2001 THEN ISNULL(Champs2, 0) END 
         ) 
     END 
+0

嗨@JaydipJ,問題是當paiementDate低於2005年,它必須使所有元素在champs1 + champs2和paiment低於2005年的總和。但在這個代碼中,即使paement高於2005年,它也會獲得所有champs1 + champs2的總和,但這並不是我正在尋找的。 任何幫助,請 – Ilyas

+0

@llyas更新腳本,按您的評論*「當entrydate是在2005年之前,使之champs1和champs2與paimentDate降低至2009年 否則entrydate大於或等於到2005年,使之和champs1的數量低於paimentDate + champs2的數量低於2001的paimentDate「* –

+0

okk我會更新謝謝 – Ilyas