2016-02-03 42 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

相關問題