【问题标题】:lookup function join based on multiple fields基于多个字段的查找函数连接
【发布时间】:2018-03-13 17:49:26
【问题描述】:

上图是我希望报告的外观。 #expiry 和 expiry 是 dataset1,#delete 和 delete 来自 dataset2。我正在使用矩阵来创建此报告。过期的数据看起来不错,但是当我尝试使用 dataset2 删除行(使用查找功能)时,删除部分的数据是错误的。有什么方法可以将 dataset2 用于我的报告或使用基于组织和日期字段的查找函数连接。 SSRS 2008 r2 谢谢。

【问题讨论】:

    标签: sql reporting-services ssrs-2008-r2 lookup


    【解决方案1】:

    是的 - 您可以将两个文本字段与 & 组合在一起,以创建一个唯一标识符以在 LOOKUP 中使用。

    =LOOKUP(Fields!ORGANIZATION.Value & "|" & CSTR(Fields!DATE.Value), Fields!ORGANIZATION.Value & "|" & CSTR(Fields!DATE.Value),  Fields!DELETE.Value, "DataSet2")
    

    更新: 如果您无法事先加入您的数据集,并且您的组织和日期可能不会同时出现在两者中,则您需要添加所有可能性。有两种方法可以做到这一点。

    您可以将当前 dataset1 查询右连接到具有所有可能的 ORG/Date 组合的查询。

    您可以创建一个仅包含日期和组织的单独数据集,并以此为基础创建表格。然后,您需要使用 LOOKUP 获取 EXPIRYDELETE

    对于任何一种方法,您都需要这样的查询来获取所有组合:

    DECLARE @StartDate DATE = '2015-11-01';
    DECLARE @EndDate DATE = '2015-11-30';
    
    ;WITH Dates AS (
        SELECT @StartDate AS myDate
        UNION ALL
        SELECT DATEADD(D ,1 ,myDate) as myDate
        FROM cte
        WHERE DATEADD(D, 1, myDate) <=  @EndDate
    )
    
    SELECT myDate, ORGANIZATION 
    INTO #TEMP_ORG_DATES 
    FROM Dates 
    CROSS JOIN (SELECT DISTINCT ORGANIZATION FROM YourTable) 
    

    您可以将此 TEMP 表用作表基,或将其右连接到您当前对日期和 ORG 的 EXPIRY 查询。

    Return all possible combinations of values on columns in SQL

    【讨论】:

    • 谢谢。我得到了大部分记录,所有记录都是正确的,除了删除部分缺少它们中的少数..可能是什么原因。假设 B 组织错过了几个日期。
    • 您的日期字段在两个数据集中的格式是否相同?一个可能是 m/d/yyyy 而另一个是 mm/dd/yyyy。对于应该是 4 号和 5 号的日期来说,日期看起来很时髦。您可以尝试在日期字段中使用 FORMAT 而不是 CSTR - FORMAT(Fields!DATE.Value, "MM/dd/yyyy")
    • 我认为问题出在组织部分。它仅从第一部分获取值,而不是从其他部分获取值。我如何使用第三个数据集或使用相同的数据集,以便组织显示所有组织名称的 union all。 Dataset 1= A,B,C,D Dataset2= A,B,C,E,F .then 组织应该是 A,B,C,D,E,F
    • 日期只是一个错字。我检查了他们没问题。
    • @user3438498 - 如果您事先不能在单个查询中加入它们,您将无法在此处加入。我用你可以做什么的信息更新了我的答案。
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多