Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
WHERE子句中无法识别SELECT子句中CASE语句中的T-SQL别名_Sql_Sql Server_Case_Where - Fatal编程技术网

WHERE子句中无法识别SELECT子句中CASE语句中的T-SQL别名

WHERE子句中无法识别SELECT子句中CASE语句中的T-SQL别名,sql,sql-server,case,where,Sql,Sql Server,Case,Where,为什么第一个查询有效,而第二个查询无效?为什么在使用CASE语句时无法识别别名?如何修复第二个查询,使WHERE子句起作用 SELECT [a], [b], [c], [d], [e], (CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0 END) Q FROM X --WHERE Q = 1 SELECT [a], [b], [c], [d], [e], (C

为什么第一个查询有效,而第二个查询无效?为什么在使用CASE语句时无法识别别名?如何修复第二个查询,使WHERE子句起作用

SELECT
[a],
[b],
[c],
[d],
[e],
(CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0 END) Q
FROM X
--WHERE Q = 1

SELECT
[a],
[b],
[c],
[d],
[e],
(CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0 END) Q
FROM X
WHERE Q = 1
第二次查询错误:


这是正确的行为。如果要在where子句中使用别名,请使用子查询或CTE:

SELECT X.*
FROM (SELECT [a], [b], [c], [d], [e],
             (CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0
              END) Q
      FROM X
     ) X
WHERE Q = 1;

这是正确的行为。如果要在where子句中使用别名,请使用子查询或CTE:

SELECT X.*
FROM (SELECT [a], [b], [c], [d], [e],
             (CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0
              END) Q
      FROM X
     ) X
WHERE Q = 1;

这是正确的行为。如果要在where子句中使用别名,请使用子查询或CTE:

SELECT X.*
FROM (SELECT [a], [b], [c], [d], [e],
             (CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0
              END) Q
      FROM X
     ) X
WHERE Q = 1;

这是正确的行为。如果要在where子句中使用别名,请使用子查询或CTE:

SELECT X.*
FROM (SELECT [a], [b], [c], [d], [e],
             (CASE WHEN (SELECT COUNT(*) FROM Y WHERE Y.a = X.b AND Y.b IS NOT NULL) > 1 then 1 else 0
              END) Q
      FROM X
     ) X
WHERE Q = 1;


除非在FROM子句中引入列别名,否则不能在WHERE子句中使用列别名。重复整个表达式或将SELECT放入CTE,然后使用CTE使用别名。

除非在FROM子句中引入列别名,否则不能在WHERE子句中使用列别名。重复整个表达式或将SELECT放入CTE,然后使用CTE使用别名。

除非在FROM子句中引入列别名,否则不能在WHERE子句中使用列别名。重复整个表达式或将SELECT放入CTE,然后使用CTE使用别名。

除非在FROM子句中引入列别名,否则不能在WHERE子句中使用列别名。重复整个表达式或将SELECT放入CTE中,然后使用CTE使用别名。

请从中读取SELECT语句的逻辑处理顺序:因为SELECT子句是步骤8,所以前面的子句不能引用该子句中定义的任何列别名或派生列,其中是步骤4。+1。。感谢referencePlease read Select语句的逻辑处理顺序from:因为Select子句是步骤8,所以该子句中定义的任何列别名或派生列都不能被前面的子句引用,其中是步骤4.+1。。感谢referencePlease read Select语句的逻辑处理顺序from:因为Select子句是步骤8,所以该子句中定义的任何列别名或派生列都不能被前面的子句引用,其中是步骤4.+1。。感谢referencePlease read Select语句的逻辑处理顺序from:因为Select子句是步骤8,所以该子句中定义的任何列别名或派生列都不能被前面的子句引用,其中是步骤4.+1。。感谢您的参考,您还可以仅计算Y中的选择计数*其中Y.a=X.b且Y.b不为空您还可以仅计算Y中的选择计数*其中Y.a=X.b且Y.b不为空您还可以仅计算Y中的选择计数*其中Y.a=X.b且Y.b不为空您还可以仅计算选择计数*从Y开始,其中Y.a=X.b且Y.b不是不正确的,或者至少是不完整的。FROM子句中引入的列别名可以在WHERE子句中使用。感谢您指出这一点。我已经编辑了我的答案以包含你的观点。不正确,或者至少不完整。FROM子句中引入的列别名可以在WHERE子句中使用。感谢您指出这一点。我已经编辑了我的答案以包含你的观点。不正确,或者至少不完整。FROM子句中引入的列别名可以在WHERE子句中使用。感谢您指出这一点。我已经编辑了我的答案以包含你的观点。不正确,或者至少不完整。FROM子句中引入的列别名可以在WHERE子句中使用。感谢您指出这一点。我已经编辑了我的答案以包含你的观点。