如果在SQL Server中使用Case的阶梯

时间:2018-07-05 11:37:06

标签: sql sql-server

我正在尝试在SQL中编写ifif梯形图,但是我发现这样做很难。我的梯子如下图所示。

IF (MortgageProduct.FreeLegalFees != NULL) THEN
      IF(MortgageProduct.FreeLegalFees==1) THEN
         Return TRUE as FreeLegalFees
      ELSE 
         Return FALSE as FreeLegalFees
ELSE    
      IF (ConveyancerFee!=NULL) THEN
          IF ConveyancerFee.AMOUNT = 0.0 then
             Return TRUE as FreeLegalFees
          ELSE
             Return FALSE as FreeLegalFees
      END IF
ELSE      
     IF (LenderFee!=NULL) THEN
        IF LenderFee.AMOUNT = 0.0 then
           Return TRUE as FreeLegalFees
        ELSE
           Return FALSE as FreeLegalFees
     END IF
ELSE 
     Return TRUE as FreeLegalFees
END IF

我知道我必须在SQL中使用Case,但是在用SQL编写Case语句时感到困惑。有人可以帮我在SQL Server中构建这个阶梯吗?

4 个答案:

答案 0 :(得分:0)

这要简洁得多。我还假设我的别名是您的表名:

CASE WHEN MP.FreeLegalFees IS NOT NULL THEN IIF(MP.FreeLegalFees = 1,1,0)
     WHEN CF.AMOUNT IS NOT NULL THEN IIF(CF.AMOUNT = 0,1,0)
     WHEN LF.Amount IS NOT NULL THEN IIF(LF.AMOUNT = 0,1,0)
     ELSE 1 END
/*
MP MortgageProduct
CF ConveyancerFee
LF LenderFee
*/

答案 1 :(得分:0)

我会这样写:

(case when mp.FreeLegalFees = 1 then 1
      when mp.FreeLegalFees is not null then 0 
      when cf.amount = 0.0 then 1
      when cf.amount is not null then 0
      when lf.amount = 0.0 then 1
      when lf.amount is not null then 0
      else 1
  end) as FreeLegalFees

答案 2 :(得分:0)

 CASE 
            WHEN MP.FREELEGALFEES = 1 THEN 1
            WHEN MP.CONVEYANCERLEGALFEESET IS NOT NULL THEN 
                 ( 
                   CASE 
                        WHEN ( 
                              (SELECT AMOUNT FROM CONVEYANCERLEGALFEE WHERE LOCATION=@p_iLocation 
                              and TYPEOFAPPLICATION=@p_iTypeOfApplication 
                              and TYPEOFBUYER=@p_iTypeOfBuyer and MAXIMUMVALUE=100000 
                              and CONVEYANCERLEGALFEESETSTRTDATE <= (SELECT GETDATE()) 
                              and CONVEYANCERLEGALFEESET = MP.CONVEYANCERLEGALFEESET ) = 0.0) 
                              THEN 1
                        ELSE 0 
                    END
                  )
            WHEN ((Select COUNT(FEESET) FROM LEGALFEE WHERE TYPEOFAPPLICATION=@p_iTypeOfApplication 
                  AND FEETYPE = (Select VALUEID from COMBOVALUE where VALUENAME='Redeeming')) >= 1 ) THEN
                  (
                     CASE
                          WHEN (
                                (SELECT AMOUNT FROM LEGALFEE 
                                  WHERE TYPEOFAPPLICATION = @p_iTypeOfApplication 
                                  AND FEETYPE= (SELECT VALUEID FROM COMBOVALUE WHERE VALUENAME='Redeeming')) = 0.0) 
                                  THEN 1
                          ELSE 0
                     END
                  )
              ELSE 1

这是完美的解决方案。谢谢大家。

答案 3 :(得分:-1)

CASE 
        WHEN MortgageProduct.FreeLegalFees IS NOT NULL
            THEN (
                    CASE 
                        WHEN MortgageProduct.FreeLegalFees = 1
                            THEN 'TRUE'
                        ELSE 'FALSE'
                        END
                    )
        WHEN ConveyancerFee  IS NOT NULL
            THEN (
                    CASE 
                        WHEN ConveyancerFee.AMOUNT = 0.0
                            THEN 'TRUE'
                        ELSE 'FALSE'
                        END
                    )
        WHEN LenderFee  IS NOT NULL
            THEN (
                    CASE 
                        WHEN LenderFee.AMOUNT = 0.0
                            THEN 'TRUE'
                        ELSE 'FALSE'
                        END
                    )
        ELSE 'TRUE'
        END AS FreeLegalFees