2012-03-23 177 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语句与/和where子句问题

我有案件陈述的工作,但我有与AND条款有关的问题。

splitVar函数只需要一个基于字符串的数组'3,4,5,6,7'并将数据拆分为插入语句的各个行。

任何人都知道我在AND子句中做错了什么?我只希望他们出现,如果ReceiveUplineMessages0

+0

您是否收到错误?什么不工作? – Lamak 2012-03-23 15:43:38

+0

错误:'消息156,级别15,状态1,行5 关键字'AND'附近的语法不正确。'# – 2012-03-23 15:45:53

回答

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 

或包装您在另一个SELECT语句中使用的WHERE您的测试:

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

我用你的第一个例子,它工作完美,谢谢。 – 2012-03-23 15:53:44

+0

很高兴它的工作。 – Taryn 2012-03-23 15:54:20