从SQL Server表中查找两个不同的记录

时间:2016-05-16 19:54:46

标签: sql tsql sql-server-2008-r2

我需要在SQL Server 2008 R2表中查找具有一个ID而不是另一个ID的所有记录,但我很难设计查询。

该表为TransactionHistory,并且具有人员列和事务类型列。在这种特殊情况下,存在没有分配的解除分配事务类型。

一个工作的例子是1000英镑的分配,100英镑的销售和900英镑的分配。并非所有人员记录都有权获得分配。 分配TransactionTypeID的ID为167,取消分配为168.返回此分配的查询将是:

select LineID, PersonID, TransactionTypeID 
from TransactionHistory 
where TransactionTypeID = 167

我需要查找按PersonID分组的所有记录,其中TransactionTypeID为168而{167}的TransactionTypeID

我尝试过CTE并将TransactionHistory表加入到自身中我无法正确查询。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望找到所有已取消分配而非分配的人。您可以使用not in

执行此操作
--First get all records that have a de-allocation
SELECT LineID, PersonID, TransactionTypeID
FROM   TransactionHistory
WHERE  TransactionTypeID = 168
--Add not in clause to remove persons with that have an allocation record
AND    PersonID not in (SELECT PersonID
                        FROM   TransactionHistory
                        WHERE  TransactionTypeID = 167)

答案 1 :(得分:0)

我可能会误解你的问题。如果是这样的话,请告诉我。我认为您可以对连接中具有transactiontypeid过滤器的连接执行相同的操作。

select LineId, PersonID, TransactionType
from TransactionHistory t
Where  
   Exists( Select 1
      from TransactionHistory t2
      where t1.PersonId = t.PersonId
      and t1.LineId = t.LineId
      t2.TransactionTypeId = 167) 
and
   Not Exists (
      Select 1
      from TransactionHistory t1
      where t1.PersonId = t.PersonId
      and t1.LineId = t.LineId
      and t1.TransactionTypeId = 168)