2016-02-09 192 views
-1

需要在Where子句中使用IF语句执行SQL查询。使用Where语句中的if语句执行SQL查询

SELECT 
    CASE 
     WHEN Isnull(CustGuarFlag ,'') = '' THEN DocName 
     ELSE DocName + ' - '+ 
      CASE 
       WHEN CustGuarFlag= 'C' THEN 'Customer' 
       ELSE 'Guarantor' 
      END 
    END DocName, 
    ISNULL(A.DOCSTAGE, '') DOCSTAGE, 
    ISNULL(A.DOCREFNO,'') DOCREFNO, 
    ISNULL(CONVERT(VARCHAR, A.DOCREFDT, 103), '') DOCREFDT, 
    ISNULL(CONVERT(VARCHAR, A.RECDDT, 103), '') RECDDT , 
    ISNULL(A.DOCVALUE, 0) DOCVALUE , 
    ISNULL(CONVERT(VARCHAR, A.DOCVLDUPTO, 103), '') DOCVLDUPTO, 
    a.pk_id AS AppDocpk, 
    b.pk_id AS Docpk, 
    CASE 
     WHEN Isnull(a.DocVerifiedStatus, '') = 'null' 
      THEN '' 
      ELSE Isnull(a.DocVerifiedStatus,'') 
    END AS DocVerifiedStatus, 
    ISNULL(RejRemarks, '') AS RejRemarks, 
    ISNULL(KYCDocHdr_Fk, 0) AS KYCPk, 
    ISNULL(DocShrtDescr, '') AS DocShrtDescr 
FROM    
    loln_apprvldoc A WITH(NOLOCK) 
JOIN 
    LGEN_DOCUMENTS B WITH(NOLOCK) ON A.Doc_FK = B.PK_ID 
LEFT OUTER JOIN 
    Lgen_KYCApprvlDoc c ON a.KYCDocHdr_Fk = c.PK_Id 
WHERE   
    A.PRPSLNO = 'KATHU1602080002' 
    AND ISNULL(A.DocStat, '') = 'R' 
    AND ISNULL(A.DocVerifiedStatus, '') IN ('Rejection', '', 'null') 
    AND CASE 
      WHEN Isnull(c.DocVerifiedStatus, '') = 'A' 
       THEN c.Pk_id IS NOT NULL 
       ELSE c.Pk_id IS NULL 
     END 
+2

'CASE'是T-SQL是一个**表达式**(如'a + b')**返回**单个原子值 - 它**不能* *用于有条件地包含/排除SQL语句中的SQL片段 –

回答

1

CASE不属于WHERE子句。将CASE子句替换为