我有一张像
beginv nm nm1 qty qty1 endinv seq
0 a ab1 5 7 0 1
0 a ab2 15 7 0 2
0 a ab3 11 9 0 3
0 a ab3 11 9 0 4
0 a ab3 11 9 0 5
0 b ab2 10 14 0 1
0 b ab3 11 9 0 2
0 c ab1 11 9 0 1
0 c ab2 15 9 0 2
0 c ab3 15 9 0 3
有没有办法显示如下
beginv nm nm1 qty qty1 endinv seq
0 a ab1 5 7 7 1
0 a ab2 15 7 15 2
0 a ab3 11 9 17 3
0 a ab3 11 9 17 4
0 a ab3 11 9 17 5
0 b ab2 10 14 14 1
0 b ab3 11 9 16 2
0 c ab1 11 9 9 1
0 c ab2 15 9 15 2
0 c ab3 15 9 21 3
如果 seq 为 1,则 endinv=qty1 else (previous)endinv+(qty-qty1) 和相同的 nm,nm1 正在重复然后之前的 endiv(例如,“a”和“ab3”以相同的 endinv 值重复三次)
似乎你可以用几个窗口条件来做到这一点SUM
。但是请注意,这样做的结果不相符,在您预期的结果,但是我假设那是因为你预期的结果是错误的。您声明所需的逻辑是"(previous)endinv+(qty-qty1)",但是,当seq
值为4
和nm
时a
,值为endinv
in 17
。然而,应用你的逻辑,你有17 + 11 - 9
which 等于19
not 17
。
SELECT beginv,
nm,
nm1,
qty,
qty1,
SUM(CASE seq WHEN 1 THEN qty1 ELSE qty END) OVER (PARTITION BY nm ORDER BY seq ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) -
SUM(CASE seq WHEN 1 THEN 0 ELSE qty1 END) OVER (PARTITION BY nm ORDER BY seq ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS endinv,
seq
FROM (VALUES(0,'a','ab1',5 ,7 ,0,1),
(0,'a','ab2',15,7 ,0,2),
(0,'a','ab3',11,9 ,0,3),
(0,'a','ab3',11,9 ,0,4),
(0,'a','ab3',11,9 ,0,5),
(0,'b','ab2',10,14,0,1),
(0,'b','ab3',11,9 ,0,2),
(0,'c','ab1',11,9 ,0,1),
(0,'c','ab2',15,9 ,0,2),
(0,'c','ab3',15,9 ,0,3))V(beginv,nm,nm1,qty,qty1,endinv,seq);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句