2012-03-23 14 views
1
SELECT 3 AS LoggedIn, 83 AS MessageID, Data AS DistID, 1 AS StatusID 
    , 0 AS Important 
    , CASE WHEN (dd.SponsorID = 3) THEN 0 ELSE d.ReceiveUplineMessages END AS Test 
    , dd.SponsorID 
FROM msg_SplitVar(',', @MessageList) sv 
INNER JOIN Distributor d 
    ON d.DistID = sv.Data 
INNER JOIN DistributorDetail dd 
    ON dd.DistID = sv.Data 
WHERE Data NOT IN (SELECT DistID FROM MessageBlockList WHERE BlockedID = 3) 
    AND Test = 0 

私はディストリビューターテーブルReceiveUplineMessagesにフィールドを設定しています。これを0または1に設定することができます。 これを0に設定すると、スポンサー(ログイン中)からのメッセージのみを送信します。t-sqlとcase文にwith/where句を付けた場合

私はこのケースステートメントを使用していますが、 AND句に問題があります。

splitVar関数は文字列ベースの配列'3,4,5,6,7'を受け取り、挿入ステートメントのためにデータを個々の行に分割します。

誰でも私がAND節で間違っていることを知っていますか? ReceiveUplineMessages0の場合にのみ、それらが表示されるようにします。

+0

エラーを受けています?何がうまくいかない? – Lamak

+0

エラー: 'メッセージ156、レベル15、状態1、行5 キーワード 'AND'の近くに構文が正しくありません。 –

答えて

4

は、あなたのWHERE句であなたのTestエイリアスを使用しないようにしよう:

SELECT 3 AS LoggedIn, 83 AS MessageID, Data AS DistID, 1 AS StatusID 
    , 0 AS Important 
    , CASE WHEN (dd.SponsorID = 3) THEN 0 ELSE d.ReceiveUplineMessages END AS Test 
    , dd.SponsorID 
FROM msg_SplitVar(',', @MessageList) sv 
INNER JOIN Distributor d 
    ON d.DistID = sv.Data 
INNER JOIN DistributorDetail dd 
    ON dd.DistID = sv.Data 
WHERE Data NOT IN (SELECT DistID FROM MessageBlockList WHERE BlockedID = 3) 
    AND (CASE WHEN (dd.SponsorID = 3) THEN 0 ELSE d.ReceiveUplineMessages END) = 0 

またはWHEREであなたのテストを使用するために、別のSELECTであなたの声明をラップ:

SELECT t.*  
FROM 
(
    SELECT 3 AS LoggedIn, 83 AS MessageID, Data AS DistID, 1 AS StatusID 
     , 0 AS Important 
     , CASE WHEN (dd.SponsorID = 3) THEN 0 ELSE d.ReceiveUplineMessages END AS Test 
     , dd.SponsorID 
    FROM msg_SplitVar(',', @MessageList) sv 
    INNER JOIN Distributor d 
     ON d.DistID = sv.Data 
    INNER JOIN DistributorDetail dd 
     ON dd.DistID = sv.Data 
    WHERE Data NOT IN (SELECT DistID FROM MessageBlockList WHERE BlockedID = 3) 
) t 
WHERE t.Test = 0 
+0

私はあなたの最初の例を使用しました。 –

+0

うれしかったです。 – Taryn