下午好!我想得到以下结果:减去必须交付的差额的其余部分。我尝试通过LAG功能。事实证明,但是某种程度上一切都是歪曲的。告诉我如何更好地用SQL编写它。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9NanVSNi5wbmcifQ==” alt =“在此处输入图像说明”>“ >>
CREATE TABLE TestTable( [id] INT IDENTITY, [productid] INT, [name] NVARCHAR(256), [ordered] DECIMAL(6,3), [delivered] DECIMAL(6,3), [remainder] DECIMAL(6,3)); INSERT INTO TestTable ([productid], [name], [ordered], [delivered], [remainder]) VALUES (712054, 'Product OSFNS', 253, 246.005, 13.255), (712054, 'Product OSFNS', 186, 183.63, 13.255), (712054, 'Product OSFNS', 196.8, 193.745, 13.255), (712054, 'Product OSFNS', 480, 477.025, 13.255)
和查询:
WITH CTE_diff AS
(SELECT
T1.[id]
,T1.[productid]
,T1.[name]
,T1.[ordered]
,T1.[delivered]
,T1.[remainder]
,LAG(T2.[ordered] - T2.[delivered], 1, T1.[ordered] - T1.[delivered])
OVER (ORDER BY T2.[productid]) as R
FROM TestTable T1 JOIN TestTable T2
ON T1.id = T2.id - 1
UNION
SELECT *
FROM (
SELECT TOP(1)
T1.[id]
,T1.[productid]
,T1.[name]
,T1.[ordered]
,T1.[delivered]
,T1.[remainder]
,LEAD(T2.[ordered] - T2.[delivered], 1, T1.[ordered] - T1.[delivered])
OVER (ORDER BY T2.[productid]) as R
FROM TestTable T1 JOIN TestTable T2
ON T1.id = T2.id
ORDER BY T1.id DESC
) as tbl)
SELECT * FROM CTE_diff;
下午好!我想得到以下结果:减去必须交付的差额的其余部分。我尝试通过LAG功能。事实证明,但是某种程度上一切都是歪曲的。 ...
我最好的猜测是您想要累积的总和: