【发布时间】:2016-03-30 08:18:59
【问题描述】:
我对@987654321@ 很熟悉,我认为(但可能是错误的)它等同于inner join。
我想知道left join、right join 和 full outer join 的等价物是什么。
谢谢。
【问题讨论】:
标签: join reporting-services left-join ssrs-2012 outer-join
我对@987654321@ 很熟悉,我认为(但可能是错误的)它等同于inner join。
我想知道left join、right join 和 full outer join 的等价物是什么。
谢谢。
【问题讨论】:
标签: join reporting-services left-join ssrs-2012 outer-join
对我来说,Lookup 看起来不像是内连接,而是相当于
select
CustomerName = (select
Customer.Name
from
Customers
where
Orders.CustomerId = Customer.Id),
Orders.OrderDate
from
Orders
连接需要两个表,并根据某些 on-clause 匹配两个表上的行。连接类型规定了如何处理两边不匹配的行。
Lookup 和上面的 SQL 等价物至少在概念上循环遍历一个表,并尝试在其他表中为每一行查找匹配的行。结果更像是左连接而不是内连接,因为不匹配的行将保留在结果中。但是,存在差异,因为 Lookup 期望在右侧找到单行,而连接会将结果集扩展到右侧的所有匹配行。因此,查找通常用于从关系的多侧到一侧进行查找,例如从上面的订单到客户。此外,连接表将参与聚合。
有一个LookupSet function,它将查找多个值,但与连接不同,它不会扩展结果集,而是返回一个将“嵌套”在行中的值数组。
因此,总而言之,我不认为查找等同于内部联接,并且 SSRS 中不存在任何其他类型的联接的等价物。
话虽如此,您通常会在报表的数据源中执行连接,假设这是一个 SQL 数据源。
【讨论】:
R. Schreurs 的解释是正确的,lookup 函数的工作方式与左连接最相似,但如果无法编辑数据源,您可以使用一些变通方法。
在大多数情况下,模拟右连接的最简单方法是反转数据集,即使用 DataSet2 作为表的数据集,并使用来自 DataSet1 的 Lookup 值。
要模拟内连接,您可以使用lookup 来控制哪些数据行可见。使用 Row Visibility 属性中的表达式,您可以隐藏两个数据集中不存在 ID 的行:
=IIF(IsNothing(Lookup(Fields!ID_1.Value, Fields!ID_2.Value, Fields!ID_2.Value, "DataSet2")), True, False)
对于像 完全外部联接 一样工作的表,我不知道在不使用第三个数据集的情况下可以工作的解决方案。如果 DataSet0 具有来自 DataSet1 和 DataSet2 的所有可能的 ID,则可以将其用于来自其他数据集的 lookup 值。然后,您可以使用与上述类似的表达式来隐藏在 DataSet1 或 DataSet2 中找不到 ID 的行。
【讨论】: