2017-04-17 69 views
0

select語句我有一個表,詳情如下SQL服務器,以防

SESSIONID NODEID SEQUENCE STVID STARTTIME    ENDTIME 
4000025502 2  0  2  2016-08-02 19:31:52.000 2016-08-02 19:44:01.000 
4000026291 2  0  3  2016-08-06 10:20:19.000 2016-08-06 10:33:03.000 
4000025219 2  0  1  2016-08-01 20:30:13.000 2016-08-01 20:37:01.000 
4000026331 2  0  4  2016-08-07 13:22:24.000 2016-08-07 13:53:36.000 

現在,而選擇該記錄我想補充另一列「狀態」, 現在爲這個「狀態」列我想檢查日曆表中是否存在「STARTTIME」。

年曆表:

DATE ID DATESTART    DATEEND     APPLICATION 
1  2016-08-02 00:00:00.000 2016-08-02 23:59:59.000 ALL 
2  2016-09-04 00:00:00.000 2016-09-04 23:59:59.000 ALL 
3  2016-09-10 00:00:00.000 2016-09-10 23:59:59.000 ALL 

的方式應該是在這裏,如果「STARTTIME」之間「DATESTART」「DATEEND」然後「STATUS」列應該是1 else 0.

解決方案應該如下所示。

更新:解決方案所需

SESSIONID NODEID SEQUENCE STVID STARTTIME    STATUS 
4000025502 2  0  2  2016-08-02 19:31:52.000 1 
4000026291 2  0  3  2016-08-06 10:20:19.000 0 
4000025219 2  0  1  2016-08-01 20:30:13.000 0 
4000026331 2  0  4  2016-08-07 13:22:24.000 0 

我怎樣才能做到這一點與Case語句或有任何其他方式做到這一點。

謝謝

+0

加入到日曆表,其條件與你是連接謂詞嗎? – TZHX

+0

用上面的輸入提供你想要的結果 – TriV

回答

1

你可以試試這個查詢

SELECT CASE WHEN Exists(SELECT 1 FROM CalendarTable c 
          WHERE y.Starttime BETWEEN c.DateStart AND c.DateEnd) 
        THEN 1 
      ELSE 0     
     END AS [Status] 
From YourDataTable y 
+0

謝謝,它的工作原理。 –

0

當然你可以很容易地使用一個case表達式。

SELECT STATUS = case when STARTTIME > DATESTART AND STARTTIME < DATEEND then 1 else 0 end 
From YourTable 
+0

這裏STARTTIME在一個表中,DATESTART和DATEEND在另一個表中。 –

0

您可以通過這種方式

select CASE 
    WHEN STARTTIME BETWEEN DATESTART AND DATEEND THEN 1 
    ELSE 0 
END AS Status From table 
+0

這裏STARTTIME在一個表中,DATESTART和DATEEND在其他表中 –