[英]How to declare a queried value and use it in CASE?
我想將 DOB 轉換為數字年齡,然后將年齡值分配到 SQL Server 上的不同年齡組中。
我已經找到了做第一步的方法,理想情況下,我應該將第一步的結果設置為一個變量,並讓它在 CASE 語句中進行比較。 但是,我不知道聲明和設置變量並在 CASE 中使用它。
我以一種愚蠢的方式得到了我想要的表格,如下所示:
SELECT FirstName, LastName,
CAST(
CASE
WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) < 18
THEN 'Under 18'
WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) BETWEEN 19 AND 30
THEN '19-30'
WHEN FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) > 30
THEN 'Over 30'
ELSE 'ERROR'
END AS VARCHAR(10)) AS Age
FROM Student
我的問題:有沒有辦法將“FLOOR((CAST (GetDate() AS INTEGER) - CAST(DOB AS INTEGER)) / 365.25)”設置為變量並在 CASE 語句中使用它?
*FirstName、LastName 和 dbo 是學生表中的列。
謝謝!
不,不在case
語句中。 兩個傳統的建議是使用 CTE 或子查詢。 但是,SQL Server 也支持apply
:
SELECT FirstName, LastName,
(CASE WHEN v.age <= 18 THEN 'Under 18'
WHEN v.age <= 30 THEN '19-30'
WHEN v.age > 30 THEN 'Over 30'
ELSE 'ERROR'
END) AS Age
FROM Student s OUTER APPLY
(VALUES (FLOOR((CAST (GetDate() AS INTEGER) - CAST(dob AS INTEGER)) / 365.25) )
) as v(age);
注釋:
varchar(10)
。 那只是多余的。case
按順序評估,因此您不需要between
. 如果您想更改邊界,這將變得更加容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.