2011-09-23 215 views
1

请帮帮忙,我怎么能在Where条款如何使用IF语句或案例时,WHERE子句中SQL

这是我的代码的一部分,我收到错误,但是我插入IfCase When插入IfCase

这是错误消息156,级别15,状态1,过程P5,35号线

关键字附近有语法错误 '之间'

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 = (@[email protected][email protected][email protected][email protected]), @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 
+0

确实看起来像t-sql –

回答

2

尝试这个:

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 
+0

哦,这比我的回答更优雅。我假设它适用于+1:D –

2

未经检验的猜测。看看这是否有效。

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 
) 
1

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)