SQL查询;如果subrecord = criteria,则排除记录

时间:2017-07-13 14:34:45

标签: sql sql-server report report-builder2.0

我正在使用Report Builder生成事件记录报告。每个事件记录都可以有一个或多个与之关联的分配记录。分配存储在不同的表(任务)中,并连接在父记录ID(事件表)上。

根据当前配置,我会收到一份报告,其中显示符合我的条件和所有相关作业的每个事件ID。

我想排除任何记录,其中任何分配都是“Property Systems”。如果我在声明中输入以排除这些记录,我会得到符合我其他标准的所有记录,但不包括“属性系统”的分配。

示例:如果记录4有3个与之关联的分配。如果这些任务中的任何一个(任务所有者)=“属性系统”我想要排除整个记录。

我想知道如何排除整个记录,而不仅仅是我现在得到的任务。

 SELECT
  Incident.IncidentNumber
 ,Incident.Status
 ,Incident.CreatedDateTime
 ,Incident.OwnerTeam [Incident Owner]
 ,Incident.Service
 ,Task.AssignedDateTime
 ,Task.OwnerTeam [Task Owner]
 ,Task.ParentRecordNumber
 ,Task.AssigneeFullName

FROM

Incident
  CROSS JOIN Task

WHERE

  Incident.IncidentNumber = Task.ParentRecordNumber
  AND Incident.Status IN (N'Active', N'Waiting')
  AND Incident.Service LIKE N'Property - Two-Way'
  AND Incident.OwnerTeam LIKE N'Corporate & Property Service Desk'
  ---- AND Task.OwnerTeam <> N'Property Systems'

与父记录关联的多个记录的术语是什么?子记录?

1 个答案:

答案 0 :(得分:3)

您需要再次检查任务表。

SELECT
  I.IncidentNumber
 ,I.Status
 ,I.CreatedDateTime
 ,I.OwnerTeam [Incident Owner]
 ,I.Service
 ,T.AssignedDateTime
 ,T.OwnerTeam [Task Owner]
 ,T.ParentRecordNumber
 ,T.AssigneeFullName
FROM
  Incident I
  JOIN 
  Task T ON I.IncidentNumber = T.ParentRecordNumber
WHERE
  Incident.Status IN (N'Active', N'Waiting')
  AND Incident.Service LIKE N'Property - Two-Way'
  AND Incident.OwnerTeam LIKE N'Corporate & Property Service Desk'
  AND NOT EXISTS (SELECT * 
          FROM Task T2 
          WHERE 
             T2.OwnerTeam = N'Property Systems' AND 
             T2.ParentRecordNumber = I.IncidentNumber)

注意正确的JOIN语法