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