我一直在尝试创建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表联系三列。我讨厌此设置,但不幸的是,它超出了我的控制范围。
它用于记录合同日期和日期以及一个自由文本字段,其中可能包含令人讨厌的任何内容。样本值可能是“ CONAU SPP”或“ CONSG ABC”等。
但是我在上面的comment_fx字段上停留了。
我特别希望查看包含CONAU的合同,或者如果它们没有满足日期要求的合同,或者根本没有一行,则返回NULL值。不幸的是,这种逻辑正在混淆他们拥有的其他任何合同,例如“ CONSG ABC” 无论我应用哪种联接,我都可以看到具有所需合同的所有资源,或者可以看到具有空值的重复行以及混合的不适用合同。我想我缺少了一些简单的东西
最终,我需要生成分配给项目的资源列表,但没有必需的合同(CONAU),该列表将触发我已经整理出的另一个流程。
更新: 让我向您展示如果删除了导致我的问题的resource_contracts表,则返回的数据: Data result
抱歉,我无法将表格格式化为类似于表格的内容,并粘贴到此处。
以下是合同表中的数据: contracts table
我想在这里做很多事情,但我将其简化为一个。 我正在尝试向查询发送参数,例如“ CONAU”。因此它将返回所有没有有效行包含字符串CONAU的资源。 问题是,它们可能有其他行,例如CONSG,或者根本没有行。
在尝试过程中,我经常会显示错误的行,或者在SELECT部分中使用ISNULL时,我将获得空行和重复的数据。
条件可以颠倒,但我想自己学习。
答案 0 :(得分:0)
WHERE
asn.booking_project = '123456'
AND con.comment_fx LIKE '%CONAU%'
到尾端。