0

我在 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

4 回答 4

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)
于 2013-09-17T03:14:27.347 回答
0

不用用case语句,加个参数就行

如果你的复选框被选中,那么有一些参数将存储到@Retired,如果没有选中,那么空值将传递给@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)
于 2013-09-17T01:59:17.613 回答
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)
于 2013-09-17T01:45:04.413 回答
0

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

上面的语句将首先检查 User.Retired 标志是否为空(这意味着 Active 用户),然后如果它找到 Active 用户,它将永远不会检查第二个条件,即 USERS.Retired = <$client.form.retired>

我认为这行不通。

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

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

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

希望这可以帮助。

于 2013-09-19T07:17:54.627 回答