2017-08-10 72 views
2

我正在使用SQL查詢插入臨時表。我有一個名爲「標誌」的列,我想根據條件按位「或」進行操作,並且我想在SQL查詢中多次執行它......所以就僞代碼而言。插入到臨時表中的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之後。

+2

樣本數據和預期的結果將真正幫助。 –

+0

我最簡單的例子: 'code' 表A表B表C 標誌名稱名稱 0 「斯科特」 「喬」 'code' 如果B表的名稱是 「斯科特」 標誌| 1 = 1 如果表C的名稱是「Joe」 Flag | 2 = 2 因此,標記應該在臨時表中爲3 – GordonRamsay

+3

最好不要將多個事實存儲在單個列中。這不是SQL方式。 –

回答

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

這工作!我不知道你可以在案件陳述之間進行按位操作。謝謝! – GordonRamsay