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;