问题描述
我被卡住了,需要一些帮助。我使用的是 sql 2017。
如何根据字段 WC_Count 重复以下数据,同时增加操作数?
原样
工作 | 股票代码 | 仓库 | 操作 | Op_Count | WC_Count |
---|---|---|---|---|---|
000000000219587 | CODE1 | 1W | 1 | 6 | 4 |
000000000219587 | CODE2 | 1W | 2 | 6 | 4 |
000000000219587 | CODE3 | 1W | 3 | 6 | 4 |
000000000219587 | CODE4 | 1W | 4 | 6 | 4 |
000000000219587 | CODE5 | 1W | 5 | 6 | 4 |
000000000219587 | CODE6 | 1W | 6 | 6 | 4 |
成为
工作 | 股票代码 | 仓库 | 操作 | Op_Count | WC_Count |
---|---|---|---|---|---|
000000000219587 | CODE1 | 1W | 1 | 6 | 4 |
000000000219587 | CODE2 | 1W | 2 | 6 | 4 |
000000000219587 | CODE3 | 1W | 3 | 6 | 4 |
000000000219587 | CODE4 | 1W | 4 | 6 | 4 |
000000000219587 | CODE5 | 1W | 5 | 6 | 4 |
000000000219587 | CODE6 | 1W | 6 | 6 | 4 |
000000000219587 | CODE1 | 1W | 7 | 6 | 4 |
000000000219587 | CODE2 | 1W | 8 | 6 | 4 |
000000000219587 | CODE3 | 1W | 9 | 6 | 4 |
000000000219587 | CODE4 | 1W | 10 | 6 | 4 |
000000000219587 | CODE5 | 1W | 11 | 6 | 4 |
000000000219587 | CODE6 | 1W | 12 | 6 | 4 |
000000000219587 | CODE1 | 1W | 13 | 6 | 4 |
000000000219587 | CODE2 | 1W | 14 | 6 | 4 |
000000000219587 | CODE3 | 1W | 15 | 6 | 4 |
000000000219587 | CODE4 | 1W | 16 | 6 | 4 |
000000000219587 | CODE5 | 1W | 17 | 6 | 4 |
000000000219587 | CODE6 | 1W | 18 | 6 | 4 |
000000000219587 | CODE1 | 1W | 19 | 6 | 4 |
000000000219587 | CODE2 | 1W | 20 | 6 | 4 |
000000000219587 | CODE3 | 1W | 21 | 6 | 4 |
000000000219587 | CODE4 | 1W | 22 | 6 | 4 |
000000000219587 | CODE5 | 1W | 23 | 6 | 4 |
000000000219587 | CODE6 | 1W | 24 | 6 | 4 |
解决方法
您可以使用递归子查询。您没有描述递增 op
的确切逻辑,所以我将只使用 row_number()
:
with cte as (
select Job,StockCode,Warehouse,Op,Op_Count,WC_Count,1 as n
from t
union all
select Job,n + 1
from cte
where n < wc_count
)
select Job,row_number() over (order by n,op) as op,op_count,wc_count
from cte;
Here 是一个 dbfiddle。