【发布时间】:2014-06-12 14:19:07
【问题描述】:
为什么第一个查询有效,而第二个查询无效?为什么使用 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
第二次查询出错:
Invalid column name 'Q'
【问题讨论】:
-
请阅读here中的“Select语句的逻辑处理顺序”:“因为SELECT子句是第8步,所以该子句中定义的任何列别名或派生列都不能被前面的子句引用”
WHERE是第 4 步。 -
+1 .. 感谢您的参考
标签: sql sql-server case where