我需要在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
表加入到自身中我无法正确查询。
答案 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)