繁体   English   中英

此SQL查询有什么问题?

[英]What's wrong with this SQL query?

SELECT [travel], [fro_m], [t_o], [dep], [arr], [fare], [discount], [faresleeper],
[rating], [seats], [s_no],
[booking_closed] = 
   CASE WHEN s1from <= @date AND s1to >= @date THEN s1Rate ELSE fare END 
        WHEN s2from <= @date AND s2to >= @date THEN s2Rate ELSE fare END 
        WHEN s3rate <= @date AND s3to >= @date THEN s3Rate ELSE fare END 
FROM a1_volvo WHERE (fro_m = @fro_m) AND (t_o = @t_o)

case语句不正确:

CASE WHEN s1from <= @date AND s1to >= @date THEN s1Rate 
WHEN s2from <= @date AND s2to >= @date THEN s2Rate 
WHEN s3rate <= @date AND s3to >= @date THEN s3Rate 
else fare END

在case语句的每一行之后都有and else语句。 它应该只在最后。

MSDN案例声明

在第三个WHEN选项中,您正在将名称为s3rate的字段与日期进行比较。我不知道这些字段是什么,但在我看来这不是日期字段...

也可以看看KevinBobTodd的答案还有另一个问题...

CASE WHEN s1from <= @date AND s1to >= @date THEN s1Rate 
        WHEN s2from <= @date AND s2to >= @date THEN s2Rate 
        WHEN s3rate <= @date AND s3to >= @date THEN s3Rate 
    ELSE fare 
END 

更好?

这和他的代码一样,但是在和之间使用。 他们使用它的好处是,它的可读性更好。 在进行代码审查时,您会花费无休止的时间比较两个名称是否键入相同

 CASE WHEN @date between s1from AND s1to THEN s1Rate 
      WHEN @date between s2from AND s2to THEN s2Rate 
      WHEN @date between s3rate AND s3to THEN s3Rate 
      ELSE fare 
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM