2016-05-16 80 views
0

我需要查找SQL Server 2008 R2表中有一個ID但不是另一個的所有記錄,但我正在努力設計查詢。從SQL Server表中查找兩條不同的記錄

該表爲TransactionHistory,它有一個人員列和一個交易類型列。在這種特殊情況下,有沒有分配的解除分配交易類型。

一個工作示例是1000英鎊的分配,100英鎊的銷售和900英鎊的分配。並非所有的人員記錄都有權獲得分配。 TransactionTypeID有167的ID和重新分配的分配是168返回的查詢,這將是:

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

我需要找到一個有168 TransactionTypeID沒有TransactionTypeID的是PersonID分組的所有記錄的167.

我試過CTE和加入TransactionHistory表本身我無法得到正確的查詢。

+0

你可以請分享表的結構? – Mureinik

回答

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) 
+0

這會爲我做,非常感謝。 – boomcubist

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) 
相關問題