SQL三态标志查询true false

时间:2018-11-13 15:26:22

标签: sql-server tsql select

我有以下情况: 数据库包含“已发送”和“成功”字段。该应用程序具有一个过滤器表单,该表单根据用户输入将参数传递给查询。可以发送,失败和/或成功(或两者都不发送)。 成功是一个INT字段,与发送字段结合使用时,该字段可以为null(无结果),0(失败)和1(成功)(应该为1表示成功或失败)。该查询接收3个参数@ sent,@ failed和@success,并根据此参数不返回任何内容,仅返回成功,仅返回失败或两者均返回。如果@sent为0,那么成功与否无关紧要 我到目前为止所拥有的:

    DECLARE @sent INT = 0
DECLARE @failed INT = 0
DECLARE @success INT  = 0
DECLARE @statusflagfail INT = NULL
DECLARE @statusflagsucc INT = NULL

IF @failed = 1 SET @statusflagfail = 0
IF @success = 1 SET @statusflagsucc = 1

SELECT *
FROM table
WHERE   (Sent = @sent OR @sent = 0)
AND ((Sent = 1 AND Success = @statusflagsucc) OR @statusflagsucc IS NULL)
AND ((Sent = 1 AND Success = @statusflagfail) OR @statusflagfail IS NULL)

我知道拥有3个状态字段会更容易,但是对我来说似乎不合逻辑,因为从理论上讲,您可以为同一条记录同时设置成功和失败。

任何输入都会得到赞赏

1 个答案:

答案 0 :(得分:0)

如果您只想查看Sent = 0,@ Success = 1和@ Failed = 1的结果,我认为您不需要额外的变量。以下脚本足以满足您的需求。

DECLARE @sent INT = 0
DECLARE @failed INT = 0
DECLARE @success INT  = 0

SELECT * 
FROM Table
WHERE   (Sent= 0)
OR (Sent = 1 AND Success = 1 AND (@success=1 or @failed=1) )
相关问题