在查询中加入数据

已完成

采用查询的最大优势在于能够将多个表中的数据联接到生成的单个数据集中。 因此,您通常需要对查询建模以包含多个数据项,这些数据项会联接到一起,以将多个表中的数据合并到生成的单个数据集中。

您可以在某个数据项下缩进另一个数据项,以将两个数据项联接到一起。 完成缩进后,位于上方的数据项将成为父数据项。 每个父数据项只能有一个子数据项。

您在一个数据项下缩进另一数据项时,仅指定了将一个表中的数据联接到另一个表中的数据, 但并未定义数据的联接方式。 要定义数据联接规则,请使用以下数据项属性:

  • DataItemLink - 在以下对象之间设置引用:当前数据项源表的一个或多个字段,以及数据模型层次结构中级别较高的数据项的一个或多个源表中的字段。 您可以使用数据项的名称来关联它们。

  • SqlJoinType - 定义在数据项关联中指定的值与数据模型层次结构中级别较高的数据项之间没有匹配时,生成的数据集应如何处理当前数据项中的行。

    • CrossJoin - 包含将上级数据项表中的每个行与下级数据项表中的每个行合并到一起的行。 交叉联接也称为笛卡尔积。 交叉联接不会应用数据项各列之间的对比项,因此 DataItemLink 属性将留空。

    • FullOuterJoin - 包含上级数据项表中的所有记录和下级数据项中的所有记录,包括由 DataItemLink 属性关联的列之间没有匹配值的记录。

    • InnerJoin - 将数据项表中由下级数据项的 DataItemLink 属性关联的列之间具有匹配值的记录合并到一起,以创建数据集。 内部联接使用等于比较运算符,根据所关联列的值将下级数据项表中的行与上级数据项表中的行进行匹配。

    • LeftOuterJoin - 与 InnerJoin 类似,但生成的数据集包含上级数据项表中的每个记录,即使记录与下级数据项中由 DataItemLink 属性关联的列没有匹配值也是如此。

    • RightOuterJoin - 与 InnerJoin 类似,但生成的数据集包含下级数据项表中的每个记录,即使记录与上级数据项中由 DataItemLink 属性关联的列没有匹配值也是如此。

以下代码示例展示了如何使用 DataItemLinkSqlJoinType 属性。

query 7345 "Avail Qty. (Base) In QC Bins"
{
    Caption = 'Avail Qty. (Base) In QC Bins';

    elements
    {
        dataitem(Location; Location)
        {
            ...
            dataitem(Warehouse_Entry; "Warehouse Entry")
            {
                DataItemLink = "Location Code" = Location.Code;
                SqlJoinType = InnerJoin;
                column(Location_Code; "Location Code")
                {
                }
                ...
                dataitem(Bin_Type; "Bin Type")
                {
                    DataItemLink = Code = Warehouse_Entry."Bin Type Code";
                    SqlJoinType = InnerJoin;
                    ...
                }
            }
        }
    }
}