2016-05-16 16 views
0

SQL Server 2008 R2テーブルのIDは1つではありませんが、クエリを設計するのには苦労しているレコードをすべて見つける必要があります。SQL Serverテーブルから2つの異なるレコードを検索

表はTransactionHistoryで、人名と取引タイプの欄があります。この特定のケースでは、割当なしの割当外取引タイプがあります。

実際の実施例は、£1000の割当、£100の売却、および£900の割当解除である。すべての人物記録が配分の権利を持つわけではありません。私はTransactionTypeIDなしで168のTransactionTypeIDを持ってPERSONIDでグループ化されたすべてのレコードを検索する必要が

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

: 割り当てTransactionTypeIDは167のIDを持っており、割り当て解除は168で、これを返すために、クエリは次のようになります

私は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) 
関連する問題