2011-08-04 23 views
0

selectステートメントの列を宣言するときにCASEステートメントでバインドされた結合テーブルを使用できるかどうかは疑問でした。私は下のスニペットに私の問題の簡略化した例を挙げました。ありがとう!selectステートメント内の結合されたテーブル

SELECT M.MID 
    ,[Count] = CASE (SELECT COUNT(*) FROM Refund R2 
      WHERE R2.RefundID = R.RefundID) = 1 
         THEN 'One' 
         ELSE 'Many' 
         END 

FROM #temp T 
JOIN Refund R ON R.RefundID = T.RefundID 

R.RefundIDバインドすることはできません "WHERE R2.RefundID = R.RefundIDは、と言っています"。

+0

をあなたは有効なクエリを持っています... –

+0

少なくとも、SQL Server用のケースが必要なようです – Narnian

+0

参照するR2というエイリアスは何ですか?私はあなたの質問のどこにもそれを見ません。 –

答えて

1

あなたはSQL Server 2005以降を使用している場合は、別のアプローチを試みることができる:あなたが単語のケースを取り出した場合

SELECT 
    M.MID, 
    [Count] = CASE COUNT(*) OVER (PARTITION BY R.RefundID) 
    WHEN 1 THEN 'One' 
    ELSE 'Many' 
    END 
FROM #temp T 
JOIN Refund R ON R.RefundID = T.RefundID 
1

悪いエイリアスがあります。あなたは、参照されているRではなくR2を、持っている:

SELECT M.MID 
     ,[Count] = CASE WHEN (SELECT COUNT(*) FROM ReferralTypeKey R2 
           WHERE R2.RefundID = R.RefundID) = 1 
           THEN 'One' 
           ELSE 'Many' 
           END 

FROM #temp T 
JOIN Refund R ON R.RefundID = T.RefundID 
+0

あなたは正しいコピーエラーです。私はサイトでこれを修正しましたが、それでもまだ動作しません。 – JBone

+0

@Jbone - それを修正したところです... – JNK

+0

@Jbone - 誤ったCASE構文も修正しました。 – JNK

関連する問題