2017-03-27 12 views
0

このような複数の値を返すサブクエリは、重複値をフィルタリングするために実行されるか、このサブクエリの無効な構文ですか? 「」条件は、近くに期待されているコンテキストで指定された非ブール型の式を:TSQL - 複数の値に対するサブクエリフィルタリング

SELECT AccountID, TransID 
FROM CardTrans 
WHERE (AccountID, CardAmount, CardDate) IN (
     SELECT AccountID, CardAmount, CardDate 
     FROM CardTrans 
     GROUP BY AccountID, CardAmount, CardDate 
     HAVING COUNT(*) > 1 
    ) 

は私が述べライン3上のエラーを取得しています。

+4

.....':ちょうどウィンドウ関数を使用します – Lamak

答えて

4

SQL Serverはinのタプルをサポートしていません。ただjoinを使用してください:

SELECT AccountID, TransID 
FROM CardTrans ct JOIN 
    (SELECT AccountID, CardAmount, CardDate 
     FROM CardTrans 
     GROUP BY AccountID, CardAmount, CardDate 
     HAVING COUNT(*) > 1 
    ) acc 
    ON acc.AccountId = ct.AccountId AND acc.CardAmount = ct.CardAmount AND 
     acc.CardDate = ct.CardDate; 

お待ちください!私はこれがすべて同じテーブルであることに気づきます。問題は、サブクエリが、SQL Serverができますしないという事実 `(COL1、COL2、COL3)ではありません

select ct.AccountID, ct.TransID 
from (select ct.*, 
      count(*) over (partition by AccountID, CardAmount, CardDate) as cnt 
     from CardTrans ct 
    ) ct 
where cnt > 1; 
関連する問題