通过另一列和表检查列

时间:2018-06-16 04:06:22

标签: sql sql-server

我有2张桌子

MasterStock table
CID | StockAvailable |
1   | 15              |
2   | 5               |

MasterPackage table
PID | CID   | StockPackage |
1   | 1     | 20           |
1   | 2     | 2            |

我想创建一个存储过程,根据masterpackage表上的stockpackage检查masterstock表上的可用库存。

我想实现它,单一查询。

PID的MasterPackage表将自动插入Trans Table。

Trans table
TID | PID | CID   | StockIssue |
  

如果StockAvailable> = StockPackage,INSERT状态为True

     

如果StockAvailable< StockPackage,INSERT状态为假

StockPackage as Stock Issue

请帮忙。

2 个答案:

答案 0 :(得分:1)

在CID上执行INNER JOIN

INSERT INTO Trans (PID, SID, StockIssue)
SELECT p.PID, p.SID, p.StockPackage AS StockIssue 
FROM   MasterPackage AS p
       INNER JOIN MasterStock AS s
       ON s.CID = p.CID
WHERE  s.StockAvailable >= p.StockPackage 

答案 1 :(得分:1)

我不确定为什么你需要这里的存储过程,因为你可以在一个简单的查询中完成它,但这是你要求的:

StockIssue

如果BIT'True'数据类型,则将1替换为'False',将0替换为CREATE FUNCTION CheckAvailability ( @MasterStock INT, @StockPackage INT ) RETURNS VARCHAR(50) AS BEGIN DECLARE @Result VARCHAR(50) SET @Result = CASE WHEN @MasterStock >= @StockPackage THEN 'True' WHEN @MasterStock < @StockPackage THEN 'False' END RETURN @Result END

如果您要定期将其与其他表或列一起使用,那么您可以定义一个标量函数来比较两列之间的值,这是一个通用的解决方案,可以提供更大的灵活性(让你的生活更轻松)。

类似的东西:

SELECT 
    MP.PID, 
    MP.CID,
    dbo.CheckAvailability(MS.StockAvailable, MP.StockPackage) AS StockIssue 
FROM MasterPackage MP
LEFT JOIN MasterStock MS ON MS.CID = MP.PID

然后叫它:

app.js

您可以在任何您想要的地方使用它。