Sql server 在使用SQL Server的查询中使用SELECT SUM时遇到困难

Sql server 在使用SQL Server的查询中使用SELECT SUM时遇到困难,sql-server,Sql Server,我有以下疑问: WITH rows AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY TimeStamp) AS rn FROM [AVL_Ignition] ) SELECT mc.[DeviceIMEI], (mp.TimeStamp - mc.TimeStamp) as millisecond, mc.Value, mc.Tag FROM rows mc JOIN rows mp ON mc

我有以下疑问:

WITH rows AS
    (
    SELECT  *, ROW_NUMBER() OVER (ORDER BY TimeStamp) AS rn
    FROM    [AVL_Ignition]
    )
SELECT  mc.[DeviceIMEI], (mp.TimeStamp - mc.TimeStamp) as millisecond, mc.Value, mc.Tag
FROM    rows mc
JOIN    rows mp
ON      mc.rn = mp.rn - 1
此查询工作正常,并返回以下值

DeviceIMEI| milissecond|value
   123    |     184    |1
   123    |     184    |0
   123    |     184    |1
   123    |     184    |0
   123    |     184    |1
   123    |     184    |0
我想添加这些值​​在毫秒字段中,其中值=1

我试图使用选择SUM如下,但没有得到结果

SELECT mc.[DeviceIMEI], SUM (WITH rows AS
    (
    SELECT  *, ROW_NUMBER() OVER (ORDER BY TimeStamp) AS rn
    FROM    [AVL_Ignition]
    )
SELECT (mp.TimeStamp - mc.TimeStamp) as millisecond
FROM    rows mc
JOIN    rows mp
ON      mc.rn = mp.rn - 1) where mc.Value = 1;

我知道SELECT SUM的使用并不复杂,但我在执行此查询时遇到了问题

在这种情况下,我不会使用
SUM
。如果您在SQL Server 2012+上,您可以像这样使用
IIF
函数(只需将
保留在它所在的
部分):

否则,您必须使用
案例

SELECT
  mc.DeviceIMEI
, (mp.TimeStamp - mc.TimeStamp) + CASE
                                    WHEN mc.Value = 1 THEN mc.Value
                                    ELSE 0
                                  END AS millisecond
, mc.Value
, mc.Tag
SELECT
  mc.DeviceIMEI
, (mp.TimeStamp - mc.TimeStamp) + CASE
                                    WHEN mc.Value = 1 THEN mc.Value
                                    ELSE 0
                                  END AS millisecond
, mc.Value
, mc.Tag