Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在WHERE子句中使用大小写表达式中的“结果表达式”_Sql_Sql Server_Case_Where - Fatal编程技术网

Sql 在WHERE子句中使用大小写表达式中的“结果表达式”

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'

是否可以使用WHERE子句中大小写表达式的结果表达式weight_类来筛选SQL Server中的记录?我无法让它工作,因为我收到一个错误,上面说:

列名“weight\u class”无效

代码:

我想这样做:

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'