簡體   English   中英

在Where子句SQL中時如何使用IF語句或大小寫

[英]How to use IF Statement or Case when in Where Clause SQL

請幫助,如何在Where子句中插入IfCase

這是我的代碼的一部分,我收到錯誤,但是我插入IfCase When

這是錯誤消息156,級別15,狀態1,過程p5,第35行

關鍵字“ BETWEEN”附近的語法不正確

AS 
WITH 
    t1 AS (SELECT 0 n UNION ALL SELECT 0 n UNION ALL SELECT 0 UNION ALL SELECT 0)
    ,Calendario AS (SELECT DATEADD(day, (ROW_NUMBER() OVER (ORDER BY a.n)), @CheckIn) AS Fetcha
        FROM t1 a, t1 b, t1 c, t1 d, t1 e, t1 f)    


SELECT @noches= convert(int,@Checkout - @CheckIn), @Sum = SUM(dbl*@canthabdbl),@SumSGL = SUM(SGL*@canthabsgl), @SumTPL = SUM(isnull(Triple,0)*@canthabtpl),@SumCUAD = SUM(isnull(Cuad,0)*@canthabcdpl),@SumChd = SUM(isnull(Chd,0)*@cantchd), @totalhab = (@Sum+@SumSGL+@SumTPL+@SumCUAD+@SumChd), @average = (@totalhab/@noches)  
FROM hotelsnew 
JOIN Calendario ON  
Calendario.Fetcha BETWEEN Desde AND Hasta+1

WHERE 
    CASE WHEN @checkout>hasta THEN  
    Calendario.Fetcha BETWEEN @CheckIn+1 AND @CheckOut-1  
    AND Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan 
    ELSE 
    Calendario.Fetcha BETWEEN @CheckIn AND @CheckOut  
    AND Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan
    END  

RETURN 

未經測試的猜測。 看看是否可行。

WHERE 
(
   @checkout>hasta AND
   Calendario.Fetcha BETWEEN @CheckIn+1 AND @CheckOut-1 AND  
   Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan 
) OR 
(
   @checkout <= hasta AND
   Calendario.Fetcha BETWEEN @CheckIn AND @CheckOut AND 
   Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan
)

嘗試這個:

WHERE Calendario.Fetcha BETWEEN
    CASE WHEN @checkout>hasta THEN @CheckIn+1 ELSE @CheckIn END
    AND
    CASE WHEN @checkout>hasta THEN @CheckOut-1 ELSE @CheckOut END
    AND Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan

CASE語句通常位於選擇部分,如下所示:

SELECT 
  CASE ContactType WHEN 'Person' THEN LastName ELSE BusinessName END
FROM Contacts

對於您的WHERE子句,我建議將其重寫為如下形式:

WHERE 
    (@checkout>hasta AND Calendario.Fetcha BETWEEN @CheckIn+1 AND @CheckOut-1  
    AND Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan)
    OR 
    (@checkout<=hasta AND Calendario.Fetcha BETWEEN @CheckIn AND @CheckOut  
    AND Hoteles = @IDHotel AND tipohabitacion = @IDTipo AND Id_plan = @IDPlan)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM