sqlserver同一行数据中取下一条记录,简便的方法

方法1,推荐

SELECT 
    a.strWorkguID, 
    a.lngIndex, 
    a.lngMangeID, 
    a.strMangeID, 
    a.dtMangeID, 
    LEAD(lngIndex, 1) OVER (ORDER BY lngIndex) AS lngNextIndex ,
    LEAD(lngMangeID, 1) OVER (ORDER BY lngIndex) AS lngMangeID 

FROM 
    VIEW_HR_PromotionWorkFlow2024 a

WHERE
    a.strWorkguID = '25EEF63F-07E6-44E5-A526-BC2CE0E64619'
    AND a.lngMangeID IS NOT NULL

方法二:


SELECT 
    a.strWorkguID, 
    a.lngIndex, 
    a.lngMangeID, 
    a.strMangeID, 
    a.dtMangeID, 
    isnull(b.lngIndex,5) AS lngNextIndex, 
    isnull(b.lngMangeID,0) AS lngNextMangeID, 
    isnull(b.strMangeID,'已完成') AS strNextMangeID,  
    b.dtMangeID AS dtNextMangeID
FROM 
    VIEW_HR_PromotionWorkFlow2024 a
OUTER APPLY (
    SELECT TOP 1 
        b.lngIndex, 
        b.lngMangeID, 
        b.strMangeID, 
        b.dtMangeID
    FROM 
        VIEW_HR_PromotionWorkFlow2024 b
    WHERE 
        a.strWorkguID = b.strWorkguID 
        AND b.lngIndex > a.lngIndex 
        AND b.lngMangeID IS NOT NULL
    ORDER BY b.lngIndex
) b
WHERE a.lngMangeID IS NOT NULL;
GO

方法三:


SELECT 
    a.strWorkguID, 
    a.lngIndex, 
    a.lngMangeID, 
    a.strMangeID, 
    a.dtMangeID, 
    b.lngIndex AS lngNextIndex, 
    b.lngMangeID AS lngNextMangeID, 
    b.strMangeID AS strNextMangeID,  -- Corrected alias to avoid duplication
    b.dtMangeID AS dtNextMangeID
FROM 
    VIEW_HR_PromotionWorkFlow2024 a
LEFT JOIN 
    VIEW_HR_PromotionWorkFlow2024 b 
    ON a.strWorkguID = b.strWorkguID 
    AND b.lngIndex = (SELECT MIN(b2.lngIndex) 
                      FROM VIEW_HR_PromotionWorkFlow2024 b2 
                      WHERE b2.strWorkguID = a.strWorkguID 
                      AND b2.lngIndex > a.lngIndex 
                      AND b2.lngMangeID IS NOT NULL)
WHERE
    a.strWorkguID = '81d3f331-a6c3-4070-bfe3-4d04a1f86449'
    AND a.lngMangeID IS NOT NULL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值