Sql server 因为我需要将这个数据集与另一个表连接起来。但是,我得到了正确的输出。我更新了您的脚本以包含EMP_ID,因为我需要将此数据集与另一个表联接。但是,我没有得到正确的输出。我得到的唯一记录是WK_NUM=0,其中大多数的NET_SPRD_LCL为0。请让我知道

Sql server 因为我需要将这个数据集与另一个表连接起来。但是,我得到了正确的输出。我更新了您的脚本以包含EMP_ID,因为我需要将此数据集与另一个表联接。但是,我没有得到正确的输出。我得到的唯一记录是WK_NUM=0,其中大多数的NET_SPRD_LCL为0。请让我知道,sql-server,tsql,Sql Server,Tsql,因为我需要将这个数据集与另一个表连接起来。但是,我得到了正确的输出。我更新了您的脚本以包含EMP_ID,因为我需要将此数据集与另一个表联接。但是,我没有得到正确的输出。我得到的唯一记录是WK_NUM=0,其中大多数的NET_SPRD_LCL为0。请让我知道我是否可以帮助更好地解释这一点。感谢您为我指出了使用滞后窗口功能的正确方向。我终于能够得到我想要的输出。 WK_NUM | NET_SPRD_LCL 10 0 11 1500 12 3600 13


因为我需要将这个数据集与另一个表连接起来。但是,我得到了正确的输出。我更新了您的脚本以包含EMP_ID,因为我需要将此数据集与另一个表联接。但是,我没有得到正确的输出。我得到的唯一记录是WK_NUM=0,其中大多数的NET_SPRD_LCL为0。请让我知道我是否可以帮助更好地解释这一点。感谢您为我指出了使用滞后窗口功能的正确方向。我终于能够得到我想要的输出。 WK_NUM | NET_SPRD_LCL 10 0 11 1500 12 3600 13 3800 14 4000
Select case when exists
   (Select * from table f
       join table n
          on n.Wk_Num = f.Wk_Num + 1
             and n.NET_SPRD_LCL > 3500
             and f.NET_SPRD_LCL > 3500
             and n.Wk_Num < 27
    then 2000 else null end
Select f.wk_Num firstWorkNbr, f.NET_SPRD_LCL firstNetSpread,
       n.wk_Num nextWorkNbr, n.NET_SPRD_LCL nextNetSpread
from table f
   join table n
       on n.Wk_Num = f.Wk_Num + 1
         and n.NET_SPRD_LCL > 3500
         and f.NET_SPRD_LCL > 3500
          and n.Wk_Num < 27
 Where not exists 
    (Select * from table f0
       join table n0 
           on n0.Wk_Num = f0.wk_Num + 1
              and n0.WkNum < f.Wk_Num))
Select case when exists
   (Select * from table f
       join table n
          on n.Wk_Num = (Select Min(Wk_Num) from table
                         Where Wk_Num > f.Wk_Num)
             and n.NET_SPRD_LCL > 3500
             and f.NET_SPRD_LCL > 3500
             and n.Wk_Num < 27
    then 2000 else null end
Select f.wk_Num firstWorkNbr, f.NET_SPRD_LCL firstNetSpread,
       n.wk_Num nextWorkNbr, n.NET_SPRD_LCL nextNetSpread, 2000 outValue
from table f
   join table n
       on n.Wk_Num = (Select Min(Wk_Num) from table
                      Where Wk_Num > f.Wk_Num)
         and n.NET_SPRD_LCL > 3500
         and f.NET_SPRD_LCL > 3500
          and n.Wk_Num < 27
 Where not exists 
    (Select * from table f0
       join table n0 
           on n0.Wk_Num = (Select Min(Wk_Num) from table
                           Where Wk_Num > f0.Wk_Num)
              and n0.WkNum < f.Wk_Num))
DECLARE @t TABLE (WK_NUM INT, NET_SPRD_LCL INT);
INSERT INTO @t VALUES 
(10, 0),
(11, 1500),
(12, 3600),
(13, 3800),
(14, 4000);
WITH cteTemp AS
    (
    SELECT  WK_NUM
        ,   thisValue = NET_SPRD_LCL
        ,   lastValue = LAG(NET_SPRD_LCL) OVER(ORDER BY WK_NUM)
    FROM @t
    WHERE WK_NUM < 27
    )
, cteBonusWeek AS
    (
    SELECT  TOP (1)
            WK_NUM
        ,   bonus = 2000
    FROM cteTemp
    WHERE thisValue > 3500 AND lastValue > 3500
    ORDER BY WK_NUM
    )
SELECT  t.WK_NUM
    ,   t.NET_SPRD_LCL
    ,   bonus = COALESCE(b.bonus, 0)
FROM @t AS t
LEFT JOIN cteBonusWeek AS b
    ON b.WK_NUM = t.WK_NUM;