代码之家  ›  专栏  ›  技术社区  ›  Unity

SQL内部或内部和中的CASE语句

  •  1
  • Unity  · 技术社区  · 7 年前
    RES as 
    (
    SELECT code , payement,
    sum(A.ALLPAYMENT) as ACTUAL_PAYMENT,
    A.NAME
    FROM FINANCES A 
    WHERE payement= '6396'   
    and (ENDDATE>=  CURRENT_TIMESTAMP) 
    and (BILLREFRENCE<> '' or 
    
    (case when (    CONVERT (int, (select BILLTIME from MYCALENDAR CL
                                    where CL.code = A.code and CL.NAME= 
    A.NAME
                                  )  
                             )
                   > CONVERT (INT, REPLACE( CONVERT(VARCHAR(8), GETDATE(), 108), 
                   ':', '' ) )  
                ) then LEVEL in ('300', '100', '404')
                  else
                    LEVEL in ('300','404')
    )
    
    
     )
    GROUP BY code, payement, A.NAME)
    

    OR条件需要为“或('300’、'100’、'404’)中的级别”或

    注:BILLTIME的格式是军事时间“130000”,因此需要转换。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sergey Kalinichenko    7 年前

    由于内部表达式的结果 WHERE 子句是布尔型的,您始终可以将其重写为布尔表达式,而无需使用 CASE

    IN 第一个案例的列表与 '100' ,您可以重组您的条件以避免 案例 表达式:

    SELECT
        ...
    WHERE LEVEL in ('300','404')
       OR LEVEL = '100' AND CONVERT(...) > CONVERT(...)