在自由文本(vchar)列上进行过滤时,SQL Server连接问题

时间:2019-05-22 08:10:38

标签: sql-server

我一直在尝试创建SQL Server视图。该视图返回分配给项目的资源列表以及一些其他详细信息,例如合同信息。 我遇到了resource_contracts表问题,因为我一直在处理本质上是自由文本字段的内容。

SELECT DISTINCT
                CONCAT(RTRIM(res.first_name),' ', RTRIM(res.surname)) AS fullname ,
        res.main_res_id                                                           ,
        res.resource_id                                                           ,
        res.resource_typ                                                          ,
        res.status                                                                ,
        rel.rel_value                                                             ,
        asn.booking_project        AS project                                            ,
        asn.booking_project_descr  AS project_descr                                      ,
        asn.assignment_position    AS position                                           ,
        asn.date_from              AS commencement_date                                  ,
        DATEADD(DAY,1,asn.date_to) AS end_date                                           ,
        con.comment_fx
FROM resourcees res
INNER JOIN resource_relations rel
    ON
            res.main_res_id = rel.resource_id
    AND     rel.date_to    >= CAST(CURRENT_TIMESTAMP AS DATE)
    AND     res.client      = rel.client
LEFT OUTER JOIN resource_relations cc
    ON
            res.client      = cc.client
    AND     res.resource_id = cc.resource_id
    AND     cc.rel_attr_id  = 'C1'
    AND     res.date_to BETWEEN cc.date_from AND     cc.date_to
    AND     cc.status = 'N'
INNER JOIN relation_values ar2
    ON
            cc.rel_value = ar2.dim_value
    AND     ar2.client   = res.client
INNER JOIN assignments asn
    ON
            res.main_res_id = asn.resource_id
LEFT OUTER JOIN resource_contracts con
    ON
            con.dim_value     = res.main_res_id
    AND     res.client        = con.client
    AND     con.comment_fx LIKE '%CONAU%'
    AND     con.date_to_fx   >= asn.date_to
WHERE
        asn.booking_project = '123456'
ORDER BY
        fullname

我想以上内容看起来相当大。这是导致该问题供参考的最后一个联接。

resource_contracts表联系三列。我讨厌此设置,但不幸的是,它超出了我的控制范围。

  • date_from_fx = DATETIME
  • date_to_fx = DATETIME
  • comment_fx = VCHAR 255

它用于记录合同日期和日期以及一个自由文本字段,其中可能包含令人讨厌的任何内容。样本值可能是“ CONAU SPP”或“ CONSG ABC”等。

但是我在上面的comment_fx字段上停留了。

我特别希望查看包含CONAU的合同,或者如果它们没有满足日期要求的合同,或者根本没有一行,则返回NULL值。不幸的是,这种逻辑正在混淆他们拥有的其他任何合同,例如“ CONSG ABC” 无论我应用哪种联接,我都可以看到具有所需合同的所有资源,或者可以看到具有空值的重复行以及混合的不适用合同。我想我缺少了一些简单的东西

最终,我需要生成分配给项目的资源列表,但没有必需的合同(CONAU),该列表将触发我已经整理出的另一个流程。

更新: 让我向您展示如果删除了导致我的问题的resource_contracts表,则返回的数据: Data result

抱歉,我无法将表格格式化为类似于表格的内容,并粘贴到此处。

以下是合同表中的数据: contracts table

我想在这里做很多事情,但我将其简化为一个。 我正在尝试向查询发送参数,例如“ CONAU”。因此它将返回所有没有有效行包含字符串CONAU的资源。 问题是,它们可能有其他行,例如CONSG,或者根本没有行。

在尝试过程中,我经常会显示错误的行,或者在SELECT部分​​中使用ISNULL时,我将获得空行和重复的数据。

条件可以颠倒,但我想自己学习。

SQL摆弄也:http://sqlfiddle.com/#!18/7558f/2

1 个答案:

答案 0 :(得分:0)

WHERE
    asn.booking_project = '123456'
    AND con.comment_fx LIKE '%CONAU%'

到尾端。