我正在使用SQL查询插入临时表。我有一个名为“Flag”的列,我希望根据条件按位“OR”,我想在SQL查询中多次执行...所以就伪代码而言。
select
if(@Date not between a.beginDate and isnull(a.endDate,@Date)
Flag | 1
else if (@Date not between b.beginDate and isnull(b.endDate,@Date)
Flag | 2
else if (@Date not between c.beginDate and isnull(c.endDate,@Date)
Flag | 4
etc.
这甚至可能吗?我在查询之后在临时表上使用单独的更新语句来执行此操作并且它可以工作,但我被告知可以使用查询中的case语句来完成。
在最简单的情况下:
Table A Table B Table C
Flag Name Name
0 "Scott" "Joe"
If table B name is "Scott"
Flag | 1 = 1
if table C name is "Joe"
Flag | 2 = 2
之后,临时表中的标志应为3。
答案 0 :(得分:0)
您可以像这样使用bitwise OR operator:
SELECT
CASE WHEN @Date NOT BETWEEN a.beginDate AND ISNULL(a.endDate,@Date) THEN 1 ELSE 0 END
| CASE WHEN @Date NOT BETWEEN b.beginDate AND ISNULL(b.endDate,@Date) THEN 2 ELSE 0 END
| CASE WHEN @Date NOT BETWEEN c.beginDate AND ISNULL(c.endDate,@Date) THEN 4 ELSE 0 END
AS Flag
FROM
....