[英]SQL Case Expression with a Where Clause
我有以下示例數據集,該數據集由以下查詢創建,該查詢根據員工在一個月內是否工作時間將員工設置為“活動”或“非活動”。
Select Concat([First Name],' ', [Last Name]) AS 'FullName',
CASE (SUM([Week 1] + [Week 2] + [Week 3] + [Week 4]))
When 0 Then 'Inactive'
ELSE 'Active'
END [Status]
From dbo.hours
Group by [first name], [last name]
全名 | 地位 |
---|---|
艾倫布魯爾 | 積極的 |
亞歷杭德羅·麥奎爾 | 不活躍 |
亞歷克斯·奈伯格 | 積極的 |
我試圖擺脫所有“活動”狀態行,以便我的查詢只顯示那些“不活動”的行。 我試圖在 FROM 和 GROUP BY 表達式之間添加 WHERE Status = Inactive ,但它沒有返回任何結果。 (不給出錯誤,只返回空列)。
有人知道我錯過了什么嗎?
您不能像這樣在Status
列上添加WHERE
條件,因為它不適用於WHERE
子句。您可以將該查詢用作內聯視圖並在外部查詢中進行條件檢查,例如
select * from (
Select Concat([First Name],' ', [Last Name]) AS 'FullName',
CASE (SUM([Week 1] + [Week 2] + [Week 3] + [Week 4]))
When 0 Then 'Inactive'
ELSE 'Active'
END [Status]
From dbo.hours
Group by [first name], [last name] ) xxx
where Status != 'Active';
您需要一個HAVING
子句,但也為了您的要求,您不需要CASE
表達式:
SELECT CONCAT([First Name],' ', [Last Name]) AS FullName,
'Inactive' [Status]
FROM dbo.hours
GROUP BY [first name], [last name]
HAVING SUM([Week 1] + [Week 2] + [Week 3] + [Week 4]) = 0
CTE 也可以:
with cte as(
Select Concat([First Name],' ', [Last Name]) AS 'FullName',
CASE (SUM([Week 1] + [Week 2] + [Week 3] + [Week 4]))
When 0 Then 'Inactive'
ELSE 'Active'
END [Status]
From dbo.hours
Group by [first name], [last name])
select FullName from cte where Status <> 'Active'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.