首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何针对一条记录评估多条记录,以找出缺少匹配值?

如何针对一条记录评估多条记录,以找出缺少匹配值?
EN

Stack Overflow用户
提问于 2019-10-09 03:42:49
回答 1查看 34关注 0票数 0

我正在创建一些QA/QC查询来清理我的数据,并且我正在尝试查找两个表之间是否缺少匹配值。我总共有三个表:检查(INSP)、风险评估(RA)和工作指令(WO)。检查生成风险评估(INSP.GlobalID = RA.InspectionGlobalID),并且是一对多。风险评估生成工单,并且是多对一(RA.WorkOrderGlobalID = WO.GlobalID)。检查和工单是1比1 (INSP.GlobalID = WO.InspectionGlobalID)。它们都有一个“优先级”字段,它是一个小整数,范围从0到12,表示工作指令的重要性和完成时间(12是最关键的)。我遇到的问题是,可能有多个RA记录与单个工作指令相关联。我正在尝试寻找在风险评估优先级和工作订单优先级之间缺少匹配值的实例。例如,可能有3个RA的优先级为6、8、10。工作订单的优先级可能为8(这是可接受的),在这种情况下,我不想选择这些RA中的任何一个,因为组中存在匹配的优先级,但我的查询是从组中选择6和10个优先级RA。如何评估与INSP关联的所有RA,并选择两个表(RA/WO)之间根本没有匹配优先级的记录。

代码语言:javascript
复制
SELECT
RA.Priority,
WO.Priority , 
RA.InspectionGlobalID as RA_INSP_GLBID,
WO.InspectionGlobalID,
RA.WorkOrderGlobalID as RAWOGLBID,
WO.GlobalID,
WO.OBJECTID as WOID, 
INSP.GlobalID,
INSP.OBJECTID as INID,
RA.OBJECTID RA_OBJECTID

FROM 
CFAdmin.RISKASSESSMENT_EVW as RA INNER JOIN
CFAdmin.WORKORDER_EVW AS WO ON WO.GlobalID = RA.WorkOrderGlobalID LEFT OUTER JOIN
CFAdmin.INSPECTION_EVW as INSP ON INSP.GlobalID = RA.InspectionGlobalID LEFT OUTER JOIN
CFAdmin.PLANTINGSPACE_EVW as PS ON INSP.PlantingSpaceGlobalID = PS.GlobalID 

WHERE
RA.Priority <> WO.Priority AND          
INSP.InspectionDate IS NOT NULL AND             
(INSP.CreatedDate > '7/1/2018') AND             
WO.CancelDate IS NULL AND
WO.Status <>2 AND                               
(WO.CreatedDate > '7/1/2018') AND                            
WO.Type NOT IN (17,18, 44,45,3) AND            
WO.WOEntity = 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-09 07:41:03

将SQL简化为与这个问题相关的部分:(您甚至没有使用来自PLANTINGSPACE_EVW的任何东西)。

代码语言:javascript
复制
SELECT RA.Priority
, WO.Priority
, RA.WorkOrderGlobalID as RAWOGLBID
, WO.GlobalID

FROM CFAdmin.RISKASSESSMENT_EVW as RA
  INNER JOIN CFAdmin.WORKORDER_EVW AS WO ON WO.GlobalID = RA.WorkOrderGlobalID
                                        AND WO.Priority <> RA.Priority

WHERE WO.CancelDate IS NULL
  AND WO.Status <> 2
  AND WO.CreatedDate > cast('7/1/2018' as date)
  AND WO.Type NOT IN (17, 18, 44, 45, 3)
  AND WO.WOEntity = 0

您应该获取优先级不匹配的所有记录。

我无法在没有样本数据的情况下进行测试,但是这样如何?

代码语言:javascript
复制
SELECT RA.Priority
, WO.Priority
, RA.InspectionGlobalID as RA_INSP_GLBID
, WO.InspectionGlobalID
, RA.WorkOrderGlobalID as RAWOGLBID
, WO.GlobalID
, WO.OBJECTID as WOID
, RA.OBJECTID RA_OBJECTID

FROM CFAdmin.RISKASSESSMENT_EVW as RA
  INNER JOIN CFAdmin.WORKORDER_EVW AS WO ON WO.GlobalID = RA.WorkOrderGlobalID

WHERE WO.GlobalId not in (
    SELECT distinct WO2.GlobalID

    FROM CFAdmin.RISKASSESSMENT_EVW as RA2
      INNER JOIN CFAdmin.WORKORDER_EVW AS WO2 ON WO2.GlobalID = RA2.WorkOrderGlobalID
                                             AND WO2.Priority = RA2.Priority
  )
  AND WO.CancelDate IS NULL
  AND WO.Status <> 2
  AND (WO.CreatedDate > '7/1/2018')
  AND WO.Type NOT IN (17, 18, 44, 45, 3)
  AND WO.WOEntity = 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58293062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档