Acumatica 针灸BQL组

Acumatica 针灸BQL组,acumatica,Acumatica,如何转换此SQL查询: SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value 对于Acumatica BQL?我相信BQL中还没有可用的功能 我解决这个问题的方法是使用投影来生成子查询。例如: [Se

如何转换此SQL查询:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

对于Acumatica BQL?

我相信BQL中还没有可用的功能

我解决这个问题的方法是使用投影来生成子查询。例如:

[Serializable]
[PXProjection(typeof(
    Select4<Table,
        Aggregate<
            GroupBy<Table.column1,
            Sum<Table.column2>>>>))]
public class AggregateTable : IBqlTable
{
    // This will contain aggregate value - GroupBy
    public abstract class column1: PX.Data.IBqlField
    {
    }

    [PXDBString(BqlField = typeof(Table.column1))]
    [PXUIField(DisplayName = "Column1")]
    public virtual string Column1 { get; set; }

    // This will contain aggregate value - Sum
    public abstract class column2: PX.Data.IBqlField
    {
    }

    [PXDBInt(BqlField = typeof(Table.column2))]
    [PXUIField(DisplayName = "Column2")]
    public virtual int? Column2 { get; set; }
}
[可序列化]
[PX投影(类型)(
选择4>)]
公共类聚合表:IBqlTable
{
//这将包含聚合值-GroupBy
公共抽象类column1:PX.Data.IBqlField
{
}
[PXDBString(BqlField=typeof(Table.column1))]
[PXUIField(DisplayName=“Column1”)]
公共虚拟字符串Column1{get;set;}
//这将包含聚合值-总和
公共抽象类column2:PX.Data.IBqlField
{
}
[PXDBInt(BqlField=typeof(Table.column2))]
[PXUIField(DisplayName=“Column2”)]
公共虚拟int?Column2{get;set;}
}
然后,您可以使用普通选择过滤聚合:

public PXSelect<AggregateTable, Where<AggregateTable.column2, Equal<Required<AggregateTable.column2>>>> FilteredTable;

var rows = FilteredTable.Select(10);
public px选择FilteredTable;
变量行=FilteredTable。选择(10);

我尽量少用它,因为如果你不小心的话,它会变得一团糟。

我相信Bql中还没有可用的函数

我解决这个问题的方法是使用投影来生成子查询。例如:

[Serializable]
[PXProjection(typeof(
    Select4<Table,
        Aggregate<
            GroupBy<Table.column1,
            Sum<Table.column2>>>>))]
public class AggregateTable : IBqlTable
{
    // This will contain aggregate value - GroupBy
    public abstract class column1: PX.Data.IBqlField
    {
    }

    [PXDBString(BqlField = typeof(Table.column1))]
    [PXUIField(DisplayName = "Column1")]
    public virtual string Column1 { get; set; }

    // This will contain aggregate value - Sum
    public abstract class column2: PX.Data.IBqlField
    {
    }

    [PXDBInt(BqlField = typeof(Table.column2))]
    [PXUIField(DisplayName = "Column2")]
    public virtual int? Column2 { get; set; }
}
[可序列化]
[PX投影(类型)(
选择4>)]
公共类聚合表:IBqlTable
{
//这将包含聚合值-GroupBy
公共抽象类column1:PX.Data.IBqlField
{
}
[PXDBString(BqlField=typeof(Table.column1))]
[PXUIField(DisplayName=“Column1”)]
公共虚拟字符串Column1{get;set;}
//这将包含聚合值-总和
公共抽象类column2:PX.Data.IBqlField
{
}
[PXDBInt(BqlField=typeof(Table.column2))]
[PXUIField(DisplayName=“Column2”)]
公共虚拟int?Column2{get;set;}
}
然后,您可以使用普通选择过滤聚合:

public PXSelect<AggregateTable, Where<AggregateTable.column2, Equal<Required<AggregateTable.column2>>>> FilteredTable;

var rows = FilteredTable.Select(10);
public px选择FilteredTable;
变量行=FilteredTable。选择(10);

我尽量少用它,因为如果你不小心的话,它会变得一团糟。

在FBQL中。下面是已实现的AggregateTo和OrderBy部分的示例:

.AggregateTo<Sum<field1>, GroupBy<field2>, Max<field3>,
     Min<field4>, Avg<field5>, Count<field6>>.
     Having<field5.Averaged.IsGreater<Zero>>
    .OrderBy<field1.Asc, field2.Desc, field3.Asc>
.AggregateTo。
有
.OrderBy

在FBQL中出现。下面是已实现的AggregateTo和OrderBy部分的示例:

.AggregateTo<Sum<field1>, GroupBy<field2>, Max<field3>,
     Min<field4>, Avg<field5>, Count<field6>>.
     Having<field5.Averaged.IsGreater<Zero>>
    .OrderBy<field1.Asc, field2.Desc, field3.Asc>
.AggregateTo。
有
.OrderBy

Hi@vannak,这个答案有用吗?Hi@vannak,已经有一段时间了,但是如果你觉得这个答案有用,你能接受它是有效的吗?谢谢。嗨@vannak,这个答案有用吗?嗨@vannak,已经有一段时间了,但是如果你觉得这个答案有用,你能接受它是有效的吗?非常感谢。