[英]How to use a Case Statement to Include or Exclude Data in SQL
我在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語句來實現此目的?
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)
不確定您使用參數的方式,但這樣的事情應該有效:
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)
不需要使用case語句,添加一個參數就行了
如果你的復選框被選中,那么有一些參數會存入@Retired,如果沒有檢查,那么null值會傳入@Retired,如果有空值,sql會將數據檢索回給你,cheer =)
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)
無法發表評論,因此將其添加為答案
上面的語句將首先檢查User.Retired標志是否為空(這意味着活動用戶),然后如果它找到活動用戶,它將永遠不會檢查第二個條件,即USERS.Retired = <$client.form.retired>
我認為這不會奏效。
我假設您需要的是,只有選中復選框,才會將退役行添加到結果中。 在這種情況下,您需要首先檢查UI上是否選中了復選框。 如果是,則根本不要過濾行,因為您需要包括Active在內的所有行。
如果未選中該復選框,則下一個條件將過濾活動的記錄。 你只需要改變我寫的有點像這樣的查詢
'<$client.form.retired>'= 1 Or ISNULL(USER.Active, 0) = 0
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.