我有一個bql聚合查詢,我想按年和月分組。 這在SQL中會很簡單,但在BQL中並不那麼明顯。BQL是否允許使用DatePart?
表(DAC)中有一個日期字段。 如果我單獨按日期字段分組,它基本上給我每個人的記錄。 我想在日期和月份中的某一年進行分組。
BQL是否有能力像DATEPART結果一樣在SQL和組中抓取DATEPART?
我看到它有一個datediff函數,但沒有關於我想要做什麼的文檔。
我有一個bql聚合查詢,我想按年和月分組。 這在SQL中會很簡單,但在BQL中並不那麼明顯。BQL是否允許使用DatePart?
表(DAC)中有一個日期字段。 如果我單獨按日期字段分組,它基本上給我每個人的記錄。 我想在日期和月份中的某一年進行分組。
BQL是否有能力像DATEPART結果一樣在SQL和組中抓取DATEPART?
我看到它有一個datediff函數,但沒有關於我想要做什麼的文檔。
我希望這對你的作品:
public sealed class DatePart
{
public const string Day = "dd";
public const string Hour = "hh";
public const string Minute = "mi";
public const string Month = "mm";
public const string Year = "yyyy";
public const string Second = "ss";
public const string Millisecond = "ms";
public class day : Constant<string> { public day() : base(Day) { } }
public class hour : Constant<string> { public hour() : base(Hour) { } }
public class minute : Constant<string> { public minute() : base(Minute) { } }
public class month : Constant<string> { public month() : base(Month) { } }
public class year : Constant<string> { public year() : base(Year) { } }
public class second : Constant<string> { public second() : base(Second) { } }
public class millisecond : Constant<string> { public millisecond() : base(Millisecond) { } }
}
public sealed class DatePart<UOM, Operand> : BqlFunction, IBqlOperand, IBqlCreator
where Operand: IBqlOperand
where UOM : Constant<string>, new()
{
private IBqlCreator _operand;
public void Verify(PXCache cache, object item, List<object> pars, ref bool? result, ref object value)
{
value = null;
object date1;
if (!getValue<Operand>(ref _operand, cache, item, pars, ref result, out date1) || date1 == null) return;
DateTime period = Convert.ToDateTime(date1);
switch ((string)new UOM().Value)
{
case DatePart.Day:
value = Convert.ToInt32(period.Day);
break;
case DatePart.Hour:
value = Convert.ToInt32(period.Hour);
break;
case DatePart.Minute:
value = Convert.ToInt32(period.Minute);
break;
case DatePart.Second:
value = Convert.ToInt32(period.Second);
break;
case DatePart.Millisecond:
value = Convert.ToInt32(period.Millisecond);
break;
case DatePart.Month:
value = Convert.ToInt32(period.Month);
break;
case DatePart.Year:
value = Convert.ToInt32(period.Year);
break;
}
}
public void Parse(PXGraph graph, List<IBqlParameter> pars, List<Type> tables, List<Type> fields,
List<IBqlSortColumn> sortColumns, StringBuilder text, BqlCommand.Selection selection)
{
if (graph != null && text != null)
{
text.Append(" DATEPART(").Append((string)new UOM().Value).Append(", ");
parseOperand<Operand>(ref _operand, graph, pars, tables, fields, sortColumns, text, selection);
text.Append(")");
}
else
{
parseOperand<Operand>(ref _operand, graph, pars, tables, fields, sortColumns, text, selection);
}
}
}
注:這是具體的MSSQL,不會對MySQL的工作。
這是爲了將數據分組到現有的Acumatica表或您創建的表上嗎? – Gabriel
這是爲了在自定義表格中的日期進行分組,儘管我希望能夠在任何可能需要聚合數據的日期字段上使用它。 – xDJR1875
Max給了你一個非常好的示例,其他選項將會在你的自定義表中有一個包含YYYYMM的文本字段,你將自己填充。這是我如何做到這一點,以避免需要編寫一個自定義的BQL操作數 – Gabriel