[英]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.
它应该只在最后。
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... 也可以看看Kevin & BobTodd的答案还有另一个问题...
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.