Sql 在WHERE子句中使用大小写表达式中的“结果表达式”
是否可以使用WHERE子句中大小写表达式的结果表达式weight_类来筛选SQL Server中的记录?我无法让它工作,因为我收到一个错误,上面说: 列名“weight\u class”无效 代码: 我想这样做:Sql 在WHERE子句中使用大小写表达式中的“结果表达式”,sql,sql-server,case,where,Sql,Sql Server,Case,Where,是否可以使用WHERE子句中大小写表达式的结果表达式weight_类来筛选SQL Server中的记录?我无法让它工作,因为我收到一个错误,上面说: 列名“weight\u class”无效 代码: 我想这样做: SELECT first_name, last_name, weight_class = CASE WHEN weight < 172 THEN 'Welterweight'
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'
我认为您必须使用have,而不是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
WHERE weight > 214 AND weight <= 200
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'
请添加所需的表别名。标记表示SQL-Server。与MySQL不同,SQL Server中的having子句中不能使用列别名+1用于第二个查询,但这可能更有效,因为它允许索引范围搜索而不是整个扫描。此答案并不正确,因为OP使用别名。不同之处在于您使用了子查询
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
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'
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'