对于一个客户,我正在通过一个XML文件发送到另一个系统,销售订单,我将所有销售订单行中每个项目的数量相加(例如:如果我有“ ItemA” 在每个数量不同的10个销售订单中,我求和并发送总数。
作为回报,无论是否可以将所请求的数量交付给客户,我都会得到答复。如果没有,我仍然可以获得可以交付的总数量。但是,在某些情况下,我需要100件“ ItemA” ,而我不能全部交付100件,但只能交付98件。在这种情况下,我需要分发(到expect
一个自定义字段)这98个FIFO,根据每个销售订单中要求的数量并基于每个销售订单的注册日期。
我尝试使用await block from the previous one or add it to the previous chain, TestCafe immediately throws an error at
,但无法达到预期的效果。这是我的代码:
AssertionError: start button remains disabled: expected [Function: __$$clientFunction$$] to be falsy"
回复示例
我要求提供35件,但只能交付30件。我需要根据请求的数量为每个销售订单分配这30件,还需要根据订单的日期分配FIFO。因此,在此示例中,我将使用请求的数量(因为我有库存)来更新UPDATE
列,在最后一个中,我分配剩余的5件。
WHILE LOOP
有人可以给我一个提示吗?谢谢
答案 0 :(得分:1)
这可能比需要的更为冗长,但是如果可能的话,我会把它留给您使用。
设置数据:
Google
Apple
Microsoft
Samsung
对于总计,对于SQL Server 20012以及更高版本,#include<stdio.h>
#include<string.h>
int main()
{
char a[20][20],str[20];
int i;
FILE *file;
file=fopen("./test.txt","r");
if(file == NULL)
printf("FILE NOT Opened...\n");
for(i=0;i<5;i++)
{
if(fgets(str, 20, file) != NULL)
{
strcpy(a[i], str);
printf("%s",a[i]);
}
}
char *tmp;
tmp = malloc(20); // still same error
int j;
for(i=0; a[i]; i++) {
for(j = 0; a[j]; j++) {
if(strcmp(a[i], a[j]) < 0) {
strcpy(tmp,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],tmp);
}
}
}
for(i = 0; a[i]; i++) printf("%s\n", a[i]);
return 0;
}
是首选技术,因此我开始介绍了一些变体。该查询带来了一些有用的数字:
DECLARE @OrderLines TABLE(
ord_Code INTEGER NOT NULL
,CustOrderCode VARCHAR(7) NOT NULL
,[Date] DATE NOT NULL
,ItemCode VARCHAR(5) NOT NULL
,ReqQty INTEGER NOT NULL
,AvailQty INTEGER NOT NULL
,RealQty INTEGER NOT NULL
);
INSERT INTO @OrderLines(ord_Code,CustOrderCode,[Date],ItemCode,ReqQty,AvailQty,RealQty) VALUES (141389,'CV/2539','2018-11-25','PX085',10,0,0);
INSERT INTO @OrderLines(ord_Code,CustOrderCode,[Date],ItemCode,ReqQty,AvailQty,RealQty) VALUES (141389,'CV/2550','2018-11-26','PX085', 5,0,0);
INSERT INTO @OrderLines(ord_Code,CustOrderCode,[Date],ItemCode,ReqQty,AvailQty,RealQty) VALUES (141389,'CV/2563','2018-11-27','PX085',10,0,0);
INSERT INTO @OrderLines(ord_Code,CustOrderCode,[Date],ItemCode,ReqQty,AvailQty,RealQty) VALUES (141389,'CV/2564','2018-11-28','PX085',10,0,0);
DECLARE @AvailQty INTEGER = 30;
然后我用SUM() OVER
做一些数学运算。 SELECT
ol.ord_Code,
ol.CustOrderCode,
ol.Date,
ol.ItemCode,
ol.ReqQty,
@AvailQty AS AvailQty,
SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date]) AS TotalOrderedQty,
@AvailQty-SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date]) AS RemainingQty
FROM
@OrderLines AS ol;
表达式有毛,但第一步检查处理此行后的RemainingQty
是否为正,如果是,则执行该顺序。如果没有,我们将尽力而为。嵌套的CASE
可以阻止负数进入结果集中。
RemainingQty
窗口函数(例如CASE
)只能位于SELECT
ol.ord_Code,
ol.CustOrderCode,
ol.Date,
ol.ItemCode,
ol.ReqQty,
@AvailQty AS AvailQty,
SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date]) AS TotalOrderedQty,
@AvailQty-SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date]) AS RemainingQty,
CASE
WHEN (@AvailQty-SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date])) > 0
THEN ol.ReqQty
ELSE
CASE
WHEN ol.ReqQty + (@AvailQty-SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date])) > 0
THEN ol.ReqQty + (@AvailQty-SUM(ReqQty) OVER (PARTITION BY ord_Code ORDER BY [Date]))
ELSE 0
END
END AS RealQty
FROM
@OrderLines AS ol
和SUM() OVER
子句中,因此我必须使用SELECT
来生成派生表。如果您愿意,CTE也可以在这里工作。但是我使用派生表来ORDER BY
基表。
JOIN
结果:
UPDATE
在此处使用其他可用的数量值进行播放:https://rextester.com/MMFAR17436