简体   繁体   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)

The case statement is incorrect: 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

You have and else statement after each line in the case statement. 在case语句的每一行之后都有and else语句。 It should only be at the end. 它应该只在最后。

MSDN Case Statement MSDN案例声明

In the third WHEN option you are comparing a field with name s3rate with a date .Well I dont know what these fields are but it seems to me that is not a date field... 在第三个WHEN选项中,您正在将名称为s3rate的字段与日期进行比较。我不知道这些字段是什么,但在我看来这不是日期字段...

Also have a look at Kevin & BobTodd answers for another catch... 也可以看看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 

is better? 更好?

This does the same as his code, but uses between and. 这和他的代码一样,但是在和之间使用。 They advantage of using it is, that it is better readabl. 他们使用它的好处是,它的可读性更好。 When doing code review you spare endless time compare whether two name are typed identical 在进行代码审查时,您会花费无休止的时间比较两个名称是否键入相同

 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