Sql 堆栈FIFO无数据
我对FIFO SQL使用这个查询,但是如果一篇文章没有“出击”或“Entrée”,它就不起作用 进场=进场,出动=出场Sql 堆栈FIFO无数据,sql,sql-server,Sql,Sql Server,我对FIFO SQL使用这个查询,但是如果一篇文章没有“出击”或“Entrée”,它就不起作用 进场=进场,出动=出场 WITH Sold AS ( SELECT IT.code , SUM(IT.quantite)*-1 AS TotalSoldQty FROM dbo.F_Mvtstk It WHERE It.Typ = 'Sortie' GROUP
WITH Sold
AS ( SELECT IT.code ,
SUM(IT.quantite)*-1 AS TotalSoldQty
FROM dbo.F_Mvtstk It
WHERE It.Typ = 'Sortie'
GROUP BY IT.code
),
Bought
AS ( SELECT IT.* ,
SUM(IT.quantite) OVER ( PARTITION BY IT.code ORDER BY IT.date ASC ) AS RunningBoughtQty
FROM F_Mvtstk IT
WHERE IT.Typ = 'Entrée'
)
SELECT B.* ,
S.TotalSoldQty ,
B.RunningBoughtQty + S.TotalSoldQty AS RunningDifferenceQty,
IIF(
B.RunningBoughtQty + S.TotalSoldQty < 0,
0,
B.RunningBoughtQty + S.TotalSoldQty
) AS RunningRemainingQty,
IIF(
B.RunningBoughtQty + S.TotalSoldQty < 0,
0,
IIF(
B.RunningBoughtQty + S.TotalSoldQty > B.quantite,
B.quantite,
B.RunningBoughtQty + S.TotalSoldQty
)
) AS RemainingQty
into essai2
FROM Bought B
INNER JOIN Sold S ON B.code = S.code
ORDER BY B.code, B.date, B.id;
如果我抑制了A02
和A03
,它就会工作
有人能帮我解决这个问题吗。看起来你只是想要这样的东西:
SELECT code, TotalSoldQty, TotalBought,
SUM(TotalBought) OVER (PARTITION BY code ORDER BY date) as runningBought,
SUM(TotalSold) OVER (PARTITION BY code ORDER BY date) as runningSold,
(SUM(TotalBought) OVER (PARTITION BY code ORDER BY date) +
SUM(TotalSold) OVER (PARTITION BY code ORDER BY date) as runningSold
) as net
FROM (SELECT IT.code, IT.date,
SUM(CASE WHEN It.Typ = 'Sortie' THEN IT.quantite)*-1 ELSE 0 END) AS TotalSoldQty,
SUM(CASE WHEN It.Typ = 'Entrée' THEN IT.quantite) ELSE 0 END) AS TotalBought
FROM dbo.F_Mvtstk It
GROUP BY IT.code, IT.date
) c
请提供示例数据、期望的结果,并描述您想要实现的逻辑。我做到了,很清楚是示例表数据还是期望的结果?“反正我们两个都需要。”穆罕默德·费塔赫说,还不清楚。此查询与标题无关-它不显示SQL中的任何堆栈结构或从堆栈中弹出内容的查询。这是对未知数据的未知表的查询。我们不知道结果应该是什么样子,也不知道问题出在哪里is@MohammedFETTAH人们不得不猜测,表中包含来自字段名的源数据——它们没有出现在SELECT语句中的任何位置,而其中一些出现在CTEsit中。它不起作用,我的查询只适用于“A01”,我不知道为什么?
SELECT code, TotalSoldQty, TotalBought,
SUM(TotalBought) OVER (PARTITION BY code ORDER BY date) as runningBought,
SUM(TotalSold) OVER (PARTITION BY code ORDER BY date) as runningSold,
(SUM(TotalBought) OVER (PARTITION BY code ORDER BY date) +
SUM(TotalSold) OVER (PARTITION BY code ORDER BY date) as runningSold
) as net
FROM (SELECT IT.code, IT.date,
SUM(CASE WHEN It.Typ = 'Sortie' THEN IT.quantite)*-1 ELSE 0 END) AS TotalSoldQty,
SUM(CASE WHEN It.Typ = 'Entrée' THEN IT.quantite) ELSE 0 END) AS TotalBought
FROM dbo.F_Mvtstk It
GROUP BY IT.code, IT.date
) c