我正在使用C#,我必须从SQLServer(我的数据库)中检索数据。
我面临的问题是: 我有一个记录说'crocin'(药品名称),分为不同批次
说
Batch Nos | Shelf nos | Available Medicine Quantity
B1 | S1 | 30
B2 | S1 | 30
B3 | S1 | 30
(此分配根据其到期日期完成)
假设我的客户需要50种药物,那么我如何从SQLServer
检索50种药物(即来自B1的30种和来自B2的20种药物)。(我想要帮助编写查询/程序等)< / p>
注意:我不能把所有药物都放在一批,比如B1,因为所有药物都必须按照有效期分开。
答案 0 :(得分:0)
此脚本将按有效期顺序对每个批次进行处理,并根据要提取的项目数量从中减去项目。
以您的示例为例,假设B1在B2之前过期,则批次B1的项将更新为0,B2的项将更新为10。
这是完全未经测试的,我不知道这是否真的是您要实现的目标,但这是我的努力。
CREATE OR ALTER PROCEDURE FetchMedicine
(
@AmountToFetch int
)
AS
BEGIN
declare @TableRowOffset int = 0;
declare @BatchIdPtr int = 0;
while(@AmountToFetch > 0)
BEGIN
set @BatchIdPtr = (Select Id from [Batch] where Quantity > 0 order by [ExpiryDate] OFFSET @TableRowOffset ROW FETCH NEXT 1 ROW ONLY)
declare @BatchQuantity int = (select top 1 Quantity from [Batch] where Id = BatchIdPtr)
if(@BatchQuantity > @AmountToFetch)
BEGIN
update [Batch] set Quantity = (@BatchQuantity - @AmountToFetch) where Id = @BatchIdPtr
BREAK;
END
ELSE
BEGIN
update [Batch] set Quantity = 0 where Id = @BatchIdPtr
set @AmountToFetch = @AmountToFetch - @BatchQuantity
END
set @TableRowOffset = @TableRowOffset + 1
END
END