2017-04-17 41 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在其他表中 –