Sql server 2012 如何在SQL Server 2014中结合case使用if语句

Sql server 2012 如何在SQL Server 2014中结合case使用if语句,sql-server-2012,Sql Server 2012,这是我的桌子 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), (2

这是我的桌子

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之和
pamentdate
降低到2009年

否则,
PaymentDate
大于或等于2005年,将
PaymentDate
低于2003年的champs1金额加上
PaymentDate
低于2001年的champs2金额

这是我的密码,任何人都可以帮我

 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)
选择
(案例
当入境日期<2011年且付款日期<2005年时
然后(IsNull(Champs1,0)+IsNull(Champs2,0)
其他(入境日期>=2001时的情况)
然后(
(如果PaymentDate<2009,则为空(Champs1.E1,0),否则为0结束
+
如果PaymentDate<2011,则为空(Champs2.E3,0)否则为0结束)
)
(完)
(完)
这是我的代码。问题是当pairementDate低于2005时,它必须将pairementDate低于2005的champs1+champs2中的所有元素求和。但在这段代码中,即使pairementDate高于2005,它也会将所有champs1+champs2的元素求和,这不是我要寻找的


请提供任何帮助

重新格式化您的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
在entrydate<2005和PaymentDate<2009时选择案例
然后ISNULL(Champs1,0)+ISNULL(Champs2,0)
当entrydate>=2005时
然后(
当paimentDate<2003且paimentDate>2001时,则为NULL(Champs1,0)结束
+

CASE WHEN pairementDate
CASE
在T-SQL中是一个计算结果正好是一个原子值的表达式-它不是一个可以选择执行一个或另一个代码分支的语句…嗨@JaydipJ,问题是当pairementDate低于2005时,它必须使champs1+champs2中所有元素的和小于2005。但是在这段代码,它使所有champs1+champs2的总和,即使付款高于2005年,这不是我要找的。有什么帮助吗please@llyas根据您的评论更新了脚本“当起始日期在2005年之前时,将付款日期小于2009年的champs1和champs2之和设置为2009年。否则,起始日期大于或等于2005年,将付款日期小于2003年的champs1金额加上付款日期小于2001年的champs2金额”