Rob*_*obB 3 sql t-sql sql-server
我正在寻找一种 SQL 方法来获取下一行的值。
我拥有的数据如下所示:
CUST PROD From_Qty Disc_Pct
23 Brush 1 0
23 Brush 13 1
23 Brush 52 4
77 Paint 1 0
77 Paint 22 7
Run Code Online (Sandbox Code Playgroud)
我最终需要的是这样的(我想创建 To_Qty 行):
CUST PROD From_Qty To_Qty Disc_Pct
23 Brush 1 12 0
23 Brush 13 51 1 #13 is 12+1
23 Brush 52 99999 4 #52 is 51+1
77 Paint 1 21 0 #1 is 99999+1
77 Paint 22 99999 7 #22 is 21+1
Run Code Online (Sandbox Code Playgroud)
我有超过 100K 行需要执行此操作,并且必须是 SQL,因为我的 ETL 应用程序允许使用 SQL,但不允许使用存储过程等。
如何从下一行获取值以便创建 To_Qty?
SELECT *,
LEAD([From_Qty], 1, 100000) OVER (PARTITION BY [CUST] ORDER BY [From_Qty]) - 1 AS To_Qty
FROM myTable
Run Code Online (Sandbox Code Playgroud)
LEAD()将根据[From_Qty].. 的顺序为您提供下一个值,您用于在更改值PARTITION BY [CUST]时重置[Cust]
或者您可以使用 CTE 和 Row_Number。
WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY [CUST] ORDER BY [From_Qty]) Rn
FROM myTable
)
SELECT t1.*,
ISNULL(t2.From_Qty - 1, 99999) To_Qty
FROM cte t1
LEFT JOIN cte t2 ON t1.Cust = t2.Cust AND t1.Rn + 1 = t2.Rn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15285 次 |
| 最近记录: |