我正在编写一个sql查询,它返回零件号、作业操作以及完成每个操作所需的时间。
时间是从前端erp系统输入的。
有时作业操作时间错误地留空,这导致表中输入的时间为0(零)。
如果时间值为零,我想填充另一行的时间,其中作业操作和零件号与当前行相同,时间值也不是零。
如果找不到除0以外的值,则只使用0。
SELECT
B.[PartNo] AS [Part],
A.[JobOpNo] AS [Operation],
A.[JobAllocatedTime] AS [ALLOCATED TIME],
-- (CASE
-- WHEN A.[JobAllocatedTime] = 0 THEN (SELECT [JobAllocatedTime] FROM [JobOperations] WHERE (the Part & Operation are the same as this rows Part & Operation AND the Allocated Time is Not = 0 , if no number other than zero is found the use 0)
-- ELSE A.[JobAllocatedTime] END) AS [ALLOCATED TIME]
FROM
[JobOperations] A
JOIN
[JobOrders] B ON A.[JobOpOrderNo] = B.[OrderNo]
ORDER BY
A.[JobOpOrderNo] DESC
我这儿有把小提琴。
数据库是microsoft sql server 2017
我可以使用存储过程来实现这一点,但是,我想知道是否有更基本的方法来实现这一点,可能是使用内置的命令/函数。
1条答案
按热度按时间ao218c7q1#
如果我理解正确,您可以使用窗口函数:
这是一把小提琴。
这将根据您的条件计算最大值并替换
0
具有该值的值。