如何使用Case语句在SQL中包含或排除数据

时间:2013-09-17 01:14:24

标签: sql sql-server

我在HTML页面上有一个复选框,我想用它来确定应该在报告中包含或排除哪些员工组。到目前为止,我只能在没有选中复选框的情况下查询包括所有员工的状态,如果选中复选框,则只显示退休员工。 ('是复选框)

SELECT USERS.UserName AS "Last_Name", USERS.UserName_First AS "First_Name", 
USERS.Retired AS "Retired"
FROM   Employee USERS
WHERE   
USERS.Retired IS NULL OR USERS.Retired = '<$client.form.retired>'
ORDER BY isnull(USERS.Retired , 0)

我想要这样做的方式是,如果选中复选框以包括退休员工和活跃员工,并按退休状态排序。 但是,如果未选中该复选框,我只希望它显示活跃员工并完全忽略报告中的退休员工 - 它与此相反。 (一个侧面问题是该列将是一个随机空白列但不确定我可以对此做任何事情)。

如何在WHERE子句中使用Case语句实现此目的?

4 个答案:

答案 0 :(得分:2)

SELECT USERS.UserName AS "Last_Name", USERS.UserName_First AS "First_Name", 
USERS.Retired AS "Retired"
FROM   Employee USERS
WHERE  @Retired='True' OR ( @Retired='False' and Users.Retired IS NULL) 
ORDER BY isnull(USERS.Retired , 0)

答案 1 :(得分:0)

不确定您使用参数的方式,但这样的方法应该有效:

SELECT USERS.UserName AS "Last_Name", USERS.UserName_First AS "First_Name", 
USERS.Retired AS "Retired"
FROM   Employee USERS
WHERE  @Retired /*your parameter from your form*/ IS NOT NULL
OR Users.Retired IS NULL 
ORDER BY isnull(USERS.Retired , 0)

答案 2 :(得分:0)

无需使用case语句,添加参数即可

如果选中了复选框,那么有一些参数会存入@Retired,如果没有检查,那么null值会传入@Retired,如果有空值,sql会将数据检索回给你,欢呼=)

SELECT USERS.UserName AS "Last_Name", USERS.UserName_First AS "First_Name", 
USERS.Retired AS "Retired"
FROM   Employee USERS
WHERE   
(@Retired IS NULL OR USERS.Retired = @Retired)
ORDER BY isnull(USERS.Retired , 0)

答案 3 :(得分:0)

无法发表评论,因此将其添加为答案

上述语句将首先检查User.Retired标志是否为空(表示活动用户),然后如果找到活动用户,它将永远不会检查第二个条件,即     USERS.Retired = <$client.form.retired>

我认为这不会奏效。

我假设您需要的是,只有选中复选框,才会将退役行添加到结果中。在这种情况下,您需要首先检查UI上是否选中了复选框。如果是,则根本不要过滤行,因为您需要包括Active在内的所有行。

如果未选中该复选框,则下一个条件将过滤活动的记录。你只需要改变我写的有点像这样的查询

'<$client.form.retired>'= 1 Or ISNULL(USER.Active, 0) = 0

希望这有帮助。