繁体   English   中英

使用和/ where子句遇到t-sql和case语句的问题

[英]Having an issue with t-sql and case statement with and/where clause

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我只想发送一条消息,如果它来自他们的赞助商(登录)

我的case语句有效,但我遇到了AND子句的问题。

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

任何人都知道我在AND条款中做错了什么? 如果ReceiveUplineMessages0我只希望它们出现。

尽量不要在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使用您的Test:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM