我想获取相关的Prodtable记录的BOMVersion。产品表中有一个名为bomversion的方法:
public BOMVersion bomVersion()
{
BOMVersion bomVersion;
// need to remove active from the query
select firstonly bomVersion
order by ItemId, Active, FromQty desc
where bomVersion.ItemId == this.ItemId &&
bomVersion.bomId == this.bomId &&
bomVersion.FromQty <= abs(this.QtySched) &&
bomVersion.FromDate <= this.bomDate &&
(bomVersion.ToDate >= this.bomDate ||
! bomVersion.ToDate
);
return bomVersion;
}
在另一个类中,我使用bom版本方法逻辑来知道具有BOMVersion的第一个可生产记录。这是我的代码:
select firstonly * from prodTable
join bomVersion
order by ItemId, Active, FromQty desc
where
bomVersion.ItemId == prodTable.ItemId &&
bomVersion.bomId == prodTable.bomId &&
bomVersion.FromQty <= abs(prodTable.QtySched) && // abs does not work
bomVersion.FromDate <= prodTable.bomDate &&
(bomVersion.ToDate >= prodTable.bomDate
|| !bomVersion.ToDate);
正如我调试时所了解的那样,该代码不返回RecId。在条件一一评论之后,我注意到该问题与abs方法有关。当我从语句中删除abs方法时(我的意思是用bomVersion.FromQty <= prodTable.QtySched替换条件),找到了记录。但是当我放腹肌时,没有发现任何记录。我应该提及的是,我在SQL Server中尝试了这种查询,在两种情况下(即使用abs和不使用abs),它会查找记录。其实我不明白是什么原因。因为此abs方法在Prodtable bomversion方法的select语句中使用。为什么那里不存在这个问题?
您可以在select子句中使用X ++函数,但是在访问SQL Server之前对它们进行评估[
abs
功能:select firstonly prodTable
join bomVersion
order by ItemId, Active, FromQty desc
where bomVersion.ItemId == prodTable.ItemId &&
bomVersion.bomId == prodTable.bomId &&
((bomVersion.FromQty <= prodTable.QtySched && prodTable.QtySched >= 0) ||
(bomVersion.FromQty <=-prodTable.QtySched && prodTable.QtySched < 0))
bomVersion.FromDate <= prodTable.bomDate &&
(bomVersion.ToDate >= prodTable.bomDate || !bomVersion.ToDate);
您有否计划制作负片?另一种方法是制作a view with a computed field。在计算字段函数中,您可以应用任何可用的SQL函数。