问题描述
我想在多个重叠的日期范围内分配总数量的值。所以, 此查询的最终结果只是 2 条日期范围重叠的记录。但是,当前查询只是复制每个中的值(数量)。但是,我只想将数据放在第一条记录中,因为它是与第二条记录在同一日期范围内的第一条记录,所以我想将第二条记录数量 (AllocQty) 设为 0。现在它的数量相等两个记录,并且它们在相同的日期范围内。我正在修改现有代码,所以我想知道是否有一种方法可以修改代码以某种方式从第一组中减去总和,这样它就不会被放在第二组中。有没有办法在不大量重写的情况下做到这一点?
from c in com
join b in all on c.SKU equals b.SKU into ps
from b in ps.DefaultIfEmpty()
.Where(x => x == null || (c.StartDate <= x.FinishDate && c.EndDate >= x.FinishDate)).DefaultIfEmpty()
select new
{
ComId = c.ComId,Metadatafromtablec,etc...
...
AllocQty = b != null ? b.VDC_Alloc : 0,//Here I want this value to be zero in the 2nd overlapping group (startdate)
} into x
//It groups by every single field except for the calculated sum of the VAlloc //and KAlloc quantities
group x by new { x.ComId,x.ComType,x.CustType,x.CustrId,x.SKU,x.StartDate,x.EndDate} into grp
select new CommitmentView
{
CommId = grp.Key.ComId,...
...
AllocQty = grp.Sum(r => r.AllocQty),TotalAllocQty = grp.Sum(r => r.AllocQty) + grp.Sum(r => r.KAllocQty),} into cv
orderby cv.SKU ascending
select cv
表 c (com):
COMID | COM_TYPE | 客户类型 | CUSTRID | SKU | START_DATE | END_DATE | VDC_CQ | KDC_CQ | COMSTATUS | CREATED_BY | CREATED_DATE | UPDATED_BY | UPDATED_DATE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
108 | 零售 | BCL | 0 | 111872 | 2/1/2021 | 4/12/2021 | 2400 | 1560 | 已批准 | 胡马克 | 2/9/2021 下午 3:26:18 | chrj | 2/23/2021 上午 11:43:41 |
107 | 零售 | BCL | 0 | 111872 | 2/7/2021 | 4/13/2021 | 288 | 84 | 草稿 | chrj | 2/8/2021 下午 3:28:24 | chrj | 2021/2/24 下午 6:27:51 |
table b(全部):
EVENT_ID | LINE_ID | SKU | CUSTRID | 分配数量 | 提交状态 | ERROR_CODE | ERROR_DESCRIPTION | CREATED_BY | CREATED_DATE | UPDATED_BY | UPDATED_DATE | 完成日期 | 计量单位 | CUSTOMER_TYPE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100150 | 5344 | 111872 | 3 | 12 | 预定 | chrj | 2/23/2021 下午 6:11:04 | 2/23/2021 下午 6:11:04 | 4/13/2021 | C | BCL | |||
100148 | 5342 | 111872 | 3 | 12 | 预定 | chrj | 2/8/2021 下午 3:23:27 | 2/8/2021 下午 3:23:27 | 2/9/2021 | C | BCL | |||
100149 | 5343 | 111872 | 3 | 12 | 预定 | chrj | 2/9/2021 下午 1:58:30 | 2/9/2021 下午 1:58:30 | 2/9/2021 | C | BCL | |||
100139 | 4952 | 111872 | 160 | 12 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4954 | 111872 | 129 | 24 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4956 | 111872 | 228 | 60 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4958 | 111872 | 218 | 12 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4960 | 111872 | 167 | 36 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4961 | 111872 | 158 | 120 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4964 | 111872 | 76 | 36 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4966 | 111872 | 163 | 24 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL | |||
100139 | 4969 | 111872 | 174 | 12 | 预定 | chrj | 2/5/2021 下午 4:38:46 | 2/5/2021 下午 4:38:46 | 2/11/2021 | C | BCL |
电流输出:
COMID | COM_TYPE | 客户类型 | CUSTRID | SKU | START_DATE | END_DATE | VDC_CQ | KDC_CQ | COMSTATUS | 总分配数量 | CREATED_BY | CREATED_DATE | UPDATED_BY | UPDATED_DATE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
107 | 零售 | BCL | 0 | 111872 | 2/7/2021 | 4/13/2021 | 288 | 84 | 草稿 | 372 | chrj | 2/8/2021 下午 3:28:24 | chrj | 2021/2/24 下午 6:27:51 |
108 | 零售 | BCL | 0 | 111872 | 2/1/2021 | 4/12/2021 | 2400 | 1560 | 已批准 | 360 | 胡马克 | 2/9/2021 下午 3:26:18 | chrj | 2/23/2021 上午 11:43:41 |
您可以看到两条记录中 360 的数量都是“重复的”。管理层希望进行更改以允许这些记录按日期重叠(您可以看到开始日期到结束日期 从 2/7/2021 到 4/12/2021 重叠。所以,现在360应该在comid为108的记录中,剩下的12个应该在comid为107的记录中,如下所示:
期望的输出:
COMID | COM_TYPE | 客户类型 | CUSTRID | SKU | START_DATE | END_DATE | VDC_CQ | KDC_CQ | COMSTATUS | 总分配数量 | CREATED_BY | CREATED_DATE | UPDATED_BY | UPDATED_DATE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
107 | 零售 | BCL | 0 | 111872 | 2/7/2021 | 4/13/2021 | 288 | 84 | 草稿 | 12 | chrj | 2/8/2021 下午 3:28:24 | chrj | 2021/2/24 下午 6:27:51 |
108 | 零售 | BCL | 0 | 111872 | 2/1/2021 | 4/12/2021 | 2400 | 1560 | 已批准 | 360 | 胡马克 | 2/9/2021 下午 3:26:18 | chrj | 2/23/2021 上午 11:43:41 |
它应该在重叠的记录和在开始日期和结束日期范围内的 FinishDate 之间分配数量。你可以看到有一个记录 来自日期为 4/13/2021 的表 b,因此这是唯一应该出现在 comid == 107 输出中的记录。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)