簡體   English   中英

SQL 帶有 Where 子句的案例表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM