gpt4 book ai didi

sql - 在 ax 2012 x++ 中构建查询时如何使用 AND/OR 运算符

转载 作者:行者123 更新时间:2023-12-01 10:01:01 25 4
gpt4 key购买 nike

我真的找不到任何关于这个的东西,我真的弄不明白。无论如何,我已经创建了一个 View ,我需要在 x++ 中使用 query/QueryRun 等对其进行过滤。

我正在尝试做的选择语句看起来像这样

  while select salestable order by PtsWebDeliveryDate, salesId
where
(SalesTable.SalesStatus == SalesStatus::Delivered && !SalesTable.PtsProdNorwood && SalesTable.CustAccount != acc && SalesTable.InvoiceAccount != acc &&
salestable.PtsWebDeliveryDate >= today() && salestable.PtsWebDeliveryDate <= today()+daysahead)
||
(
SalesTable.SalesStatus == SalesStatus::Backorder && SalesTable.SalesType == SalesType::Sales && !SalesTable.PtsProdNorwood &&
SalesTable.CustAccount != acc && SalesTable.InvoiceAccount != acc &&
(
(salesTable.PtsSalesorderPacked && salestable.PtsWebDeliveryDate >= today() && salestable.PtsWebDeliveryDate <= today()+daysAhead)
||
(!salesTable.PtsSalesorderPacked && salestable.PtsWebDeliveryDate >= d && salestable.PtsWebDeliveryDate <= today()+daysahead))
)
{
//Do stuff
}

如您所见,我需要使用一些 OR 运算符。我已经开始在 x++ 中构建查询,这就是我得到的:

q = new Query();
q.addDataSource(TableNum("packlistview"));
q.dataSourceNo(1).addSortField(fn[_OrderBy], _direction);

q.dataSourceNo(1).addRange(fieldNum(PackListView, SalesStatus)).value(queryValue(SalesStatus::Delivered));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsProdnorwood)).value(queryValue(NoYes::No));
q.dataSourceNo(1).addRange(fieldNum(PackListView, CustAccount)).value(queryValue(!acc));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsWebDeliveryDate)).value(queryrange(today(),today()+daysahead));

//OR
q.dataSourceNo(1).addRange(fieldNum(PackListView, SalesStatus)).value(queryValue(SalesStatus::Backorder));
q.dataSourceNo(1).addRange(fieldNum(PackListView, SalesType)).value(queryValue(SalesType::Sales));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsProdnorwood)).value(queryValue(false));
q.dataSourceNo(1).addRange(fieldNum(PackListView, CustAccount)).value(queryValue(!acc));
q.dataSourceNo(1).addRange(fieldNum(PackListView, InvoiceAccount)).value(queryValue(!acc));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsSalesorderPacked)).value(queryValue(false));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsWebDeliveryDate)).value(queryrange(d, today()+daysahead));

//OR
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsSalesorderPacked)).value(queryValue(false));
q.dataSourceNo(1).addRange(fieldNum(PackListView, PtsWebDeliveryDate)).value(queryrange(d, today()+daysahead));


qr = new queryRun(q);

while( qr.next())// && counter < 100
{
//Do stuff
}

那么我该如何将 OR 运算符与它结合起来呢?

干杯伙计们:)

最佳答案

您可以像这样使用您的条件生成查询字符串:

.value(strfmt("((Field1 == %1 && Field2 == %2) || Field1 != %3)", 
var1, var2, var3, varX, ...));

可能不是很聪明,但它是标准的方式。您可以将 queryValue 函数与一些变量(例如基本枚举或日期)一起使用,以获得每个值的正确查询字符串。

关于sql - 在 ax 2012 x++ 中构建查询时如何使用 AND/OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com