[英]Use “result expression” from CASE expression in WHERE clause
Is it possible to filter records in SQL Server by using a result expression (weight_class) from a CASE
expression in the WHERE
clause? 是否可以通过使用
WHERE
子句中CASE
表达式的结果表达式(weight_class)来过滤SQL Server中的记录? I can't get it to work because I get an error saying: 我无法让它工作,因为我收到一个错误说:
Invalid column name 'weight_class'
列名称'weight_class'无效
Code: 码:
SELECT
first_name, last_name,
weight_class = CASE
WHEN weight < 172 THEN 'Welterweight'
WHEN weight <= 192 THEN 'Middleweight'
WHEN weight <= 214 THEN 'Light heavyweight'
WHEN weight <= 220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END
FROM
athletes
This is how I want to do: 这就是我想要做的:
SELECT
first_name, last_name,
weight_class = CASE
WHEN weight < 172 THEN 'Welterweight'
WHEN weight <= 192 THEN 'Middleweight'
WHEN weight <= 214 THEN 'Light heavyweight'
WHEN weight <= 220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END
FROM
athletes
WHERE
weight_class = 'Cruiserweight'
SQL-Server requires a table alias: SQL-Server需要一个表别名:
SELECT * from
(
SELECT first_name, last_name,
CASE
WHEN weight<172 THEN 'Welterweight'
WHEN weight<=192 THEN 'Middleweight'
WHEN weight<=214 THEN 'Light heavyweight'
WHEN weight<=220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END AS weight_class
FROM athletes
) as t
WHERE weight_class = 'Cruiserweight'
SELECT * from
(
SELECT first_name, last_name,
CASE
WHEN weight<172 THEN 'Welterweight'
WHEN weight<=192 THEN 'Middleweight'
WHEN weight<=214 THEN 'Light heavyweight'
WHEN weight<=220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END AS weight_class
FROM athletes
) t
WHERE weight_class = 'Cruiserweight'
I think you will have to use HAVING
instead of WHERE
: 我想你将不得不使用
HAVING
而不是WHERE
:
SELECT first_name, last_name, weight_class =
CASE
WHEN weight<172 THEN 'Welterweight'
WHEN weight<=192 THEN 'Middleweight'
WHEN weight<=214 THEN 'Light heavyweight'
WHEN weight<=220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END
FROM athletes
HAVING weight_class = 'Cruiserweight'
EDIT: 编辑:
By the way, why don't you just use: 顺便问一下,你为什么不用它:
SELECT first_name, last_name, weight_class =
CASE
WHEN weight<172 THEN 'Welterweight'
WHEN weight<=192 THEN 'Middleweight'
WHEN weight<=214 THEN 'Light heavyweight'
WHEN weight<=220 THEN 'Cruiserweight'
ELSE 'Heavyweight'
END
FROM athletes
WHERE weight > 214 AND weight <= 200
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.