2016-02-03 44 views
-1

我有下面这个查询CheckPointTimeValue min和CheckPointTimeValue之间的最大日期我想显示TimeValueBit为1和其他为0.我怎么能在SQL SERVER如何获取所有的最低和最高日期之间的查询

SELECT C.CHECKPOINTNAME, TC.TERMINALCHECKPOINTID, CT.CheckPointTimeValue, CT.CheckPointTimeID, C.Scheduled, CT.ScheduledTimeValue 
,CASE 
WHEN CT.CheckPointTimeValue BETWEEN (SELECT MIN(CheckPointTimeValue) FROM [TAMS].[CheckPointTimes]) AND (SELECT MAX(CheckPointTimeValue) FROM [TAMS].[CheckPointTimes]) THEN 1 
ELSE 0 
END AS 'TimeValueBit' 
FROM [TAMS].[TerminalCheckPoints] TC 
     INNER JOIN [TAMS].[CheckPoint] C ON C.CHECKPOINTID = TC.CHECKPOINTID 
     LEFT JOIN [TAMS].[CheckPointTimes] CT ON CT.TerminalCheckPointID = TC.TERMINALCHECKPOINTID 
     WHERE TC.TERMINALID = 1 AND TC.CHECKPOINTTYPE = 'TRUCK' 
     ORDER BY C.SEQUENCENUMBER 

enter image description here

+0

我很困惑。问题是什么? – SQLChao

+0

介于最小CheckPointTimeValue和最大值之间CheckPointTimeValue我想将TimeValueBit显示为1,但由于NULL记录介于它之间,所以它显示0但是如何在最小值和最大值checkpointtimevalue之间显示1,即使在null之间出现 – user1030181

+0

在' CASE ... WHEN CT.CheckpointTimeValue为空' – logixologist

回答

1
;WITH cte AS (
    SELECT C.CHECKPOINTNAME, TC.TERMINALCHECKPOINTID, CT.CheckPointTimeValue, CT.CheckPointTimeID, C.Scheduled, CT.ScheduledTimeValue 
    ,CASE 
     WHEN CT.CheckPointTimeValue BETWEEN (SELECT MIN(CheckPointTimeValue) FROM [TAMS].[CheckPointTimes]) AND (SELECT MAX(CheckPointTimeValue) FROM [TAMS].[CheckPointTimes]) THEN 1 
     ELSE 0 
    END AS 'TimeValueBit' 
    FROM [TAMS].[TerminalCheckPoints] TC 
    INNER JOIN [TAMS].[CheckPoint] C ON C.CHECKPOINTID = TC.CHECKPOINTID 
    LEFT JOIN [TAMS].[CheckPointTimes] CT ON CT.TerminalCheckPointID = TC.TERMINALCHECKPOINTID 
    WHERE TC.TERMINALID = 1 AND TC.CHECKPOINTTYPE = 'TRUCK' 
    ORDER BY C.SEQUENCENUMBER) 

SELECT 
    CheckPointName 
, TerminalCheckPointID 
, CheckPointTimeValue 
, CheckPointTimeID 
, Scheduled 
, ScheduledTimeValue 
, CASE 
    WHEN TerminalCheckPointID BETWEEN (SELECT MIN(TerminalCheckPointID) FROM cte WHERE TimeValueBit = 1) AND (SELECT MAX(TerminalCheckPointID) FROM cte WHERE TimeValueBit = 1) 
     THEN 1 
     ELSE 0 
    END AS TimeValueBit 
FROM 
cte 
+0

然后所有4条记录显示为1 ...但我只想要那些前三个记录显示1 .... – user1030181

+0

@ user1030181更新回答。我用你的基本查询来确定terminalid是否在两个真正的时间值之间。 – SQLChao

+0

这工作完美@Sqlchao – user1030181

相关问题