SQL存储过程中如何获取下一行PriceValue列的值?
实现需求:根据Type字段返回当前或下一行的PriceValue
首先要明确:SQL中的行本身是无序的,所以必须指定排序规则来定义“下一行”(比如按ProductID、ShopID或其他业务相关字段排序),否则“下一行”的结果是不可预期的。
假设我们以ProductID升序作为排序依据,你可以使用窗口函数LEAD()来获取下一行的PriceValue,再通过CASE语句判断Type字段决定返回值:
SELECT w.ShopID AS shopID, w.ProductName AS ProductName, w.ProductID AS ProductID, CASE WHEN w.Type = 'Outdoor' THEN LEAD(w.PriceValue) OVER (ORDER BY w.ProductID) ELSE w.PriceValue END AS PriceValue FROM Warehouse w
关键细节说明:
LEAD(w.PriceValue) OVER (ORDER BY w.ProductID):该窗口函数会获取当前行按指定规则排序后的下一行PriceValue,若当前是最后一行,将返回NULL。- 若需按多字段或分组排序(比如按店铺分组后排序),可修改
OVER子句,示例:OVER (PARTITION BY w.ShopID ORDER BY w.ProductID)。 - 若希望最后一行的
Outdoor类型数据不返回NULL,可为LEAD()添加默认值,写法:LEAD(w.PriceValue, 1, w.PriceValue) OVER (...),此时最后一行会返回自身的PriceValue。
内容的提问来源于stack exchange,提问作者saafiyah
相关产品推荐
相关产品推荐

