sql-server - 过滤自由文本 (vchar) 列时出现 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 = 日期时间
- date_to_fx = 日期时间
- comment_fx = VCHAR 255
它用于记录合同的日期和日期,以及一个可以包含任何令人讨厌的内容的自由文本字段。样本值可能是“CONAU SPP”或“CONSG ABC”等。
但是,我被困在上面的 comment_fx 字段上。
我特别想查看包含 CONAU 的合同,或者如果它们没有满足日期要求的合同,或者根本没有一行,则返回 NULL 值。不幸的是,这种逻辑与他们拥有的任何其他合同(例如“CONSG ABC”)混淆了。无论我申请什么联接,我要么可以看到所需合同的所有资源,要么可以复制具有空值的行和非适用的合同。我想我错过了一些简单的东西
最终,我需要生成分配给项目但没有所需合同 (CONAU) 的资源列表,该列表将触发我已经整理好的另一个流程。
更新: 让我向您展示如果我们删除导致我的问题的 resource_contracts 表返回的数据: 数据结果
抱歉,我无法将表格格式化为类似于表格的内容以粘贴到此处。
这是来自contracts表的数据: contracts table
我想在这里做很多事情,但我会把它简化成一个。我正在尝试向查询发送参数,例如“CONAU”。因此它将返回所有没有包含字符串 CONAU 的有效行的资源。问题是,它们可能有其他行,如 CONSG,或者根本没有行。
在我的尝试中,我经常会显示错误的行,或者在 SELECT 部分使用 ISNULL 时,我会得到空行和重复的数据。
条件可能会颠倒,但我正在尝试自己学习这一点。
SQL小提琴也是:http ://sqlfiddle.com/#!18/7558f/2
解决方案
WHERE
asn.booking_project = '123456'
AND con.comment_fx LIKE '%CONAU%'
到尾声。
推荐阅读
- c# - c#函数不更新参数
- android - 谷歌地图没有显示?
- cordova - 应用程序崩溃后如何以编程方式重新加载 Cordova 插件?
- python - 如何让 YOLOv3 只检测一种对象类型?
- python - 即使对 rwx 的所有权限,webkit_server 文件夹的权限也被拒绝
- vue.js - 自定义输入组件上的vue更改事件
- julia - MethodError: 没有方法匹配 -(::VariableRef, ::Nothing)
- php - 如何将字符串转换为数组,哪个字符串是数组结构
- python-3.x - 无法使用flask框架pymysql查询数据
- nginx - 如何将 nginx proxy_pass 与子域一起使用?